Setup
Data preparation
t-SNE: on capacities
PNAS Studies (adults)
PNAS Study 1
Joining, by = "capacity"

PNAS Study 2
Joining, by = "capacity"

PNAS Study 3
Joining, by = "capacity"

PNAS Study 4
Joining, by = "capacity"

Dimkid Studies (children)
Dimkid Study 3 (7-9y)
Joining, by = "capacity"

Dimkid Study 4 (4-6y)
Joining, by = "capacity"

Dimkid Studies 3-4 (4-9y)
All together
Joining, by = "capacity"

Sliding window
Column `capacity` joining factor and character vector, coercing into character vector
Joining, by = "window"
Joining, by = "capacity"

Old scraps
Need to review and delete…
2 dimensions
2 dimensions sliding window
t-SNE: on characters
2 dimensions
3 dimensions
4 dimensions
LS0tCnRpdGxlOiAiRGlta2lkOiBFeHBsb3JpbmcgdFNORSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKIyBTZXR1cAoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGfQojIGxvYWQgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGxhbmdjb2cpICMgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NvZy9sYW5nY29nCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkocm1zKQpsaWJyYXJ5KFJ0c25lKQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeShnZ3JlcGVsKQpgYGAKCmBgYHtyIGRhdGFmcmFtZSBmcm9tIFBOQVMgU3R1ZHkgNCwgaW5jbHVkZSA9IEZ9CiMgUE5BUyBzdHVkaWVzIChmcm9tIGh0dHA6Ly9ycHVicy5jb20va2d3ZWlzbWFuL2JvZHloZWFydG1pbmRfYW5hbHlzaXMpCgojIGZ1bmN0aW9ucyAtLS0tLQojIG1ha2Ugcm91bmRpbmcgZnVuY3Rpb24Kcm91bmQyIDwtIGZ1bmN0aW9uKHgpIHtmb3JtYXQocm91bmQoeCwgMiksIG5zbWFsbCA9IDIpfQoKIyBtYWtlIGNsZWFudXAgZnVuY3Rpb24KY2xlYW51cCA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIpKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkX3Jhd19zdHVkeTF9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkX3Jhd19zdHVkeTJ9CiAgICAKICAgICMgZW5hY3QgZXhjbHVzaW9uYXJ5IGNyaXRlcmlhCiAgICBkX2NsZWFuXzEgPC0gZCAlPiUKICAgICAgbXV0YXRlKGZpbmlzaGVkX21vZCA9IGlmZWxzZShpcy5uYShDQVRDSCksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZpbmlzaGVkID09IDEsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSkpKSAlPiUKICAgICAgZmlsdGVyKENBVENIID09IDEsICMgZXhjbHVkZSBQcyB3aG8gZmFpbCBjYXRjaCB0cmlhbHMgCiAgICAgICAgICAgICBmaW5pc2hlZF9tb2QgIT0gMCkgJT4lICMgZXhjbHVkZSBQcyB3aG8gZGlkIG5vdCBjb21wbGV0ZSB0YXNrCiAgICAgIG11dGF0ZSh5b2JfY29ycmVjdCA9IGFzLm51bWVyaWMoCiAgICAgICAgaWZlbHNlKGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpID4gMTkwMCAmIAogICAgICAgICAgICAgICAgIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpIDwgMjAwMCwgCiAgICAgICAgICAgICAgIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpLCBOQSkpLCAjIGNvcnJlY3QgZm9ybWF0dGluZyBpbiB5b2IKICAgICAgICBhZ2VfYXBwcm94ID0gMjAxNiAtIHlvYl9jb3JyZWN0KSAlPiUgIyBjYWxjdWxhdGUgYXBwcm94aW1hdGUgYWdlCiAgICAgIG11dGF0ZShnZW5kZXIgPSBmYWN0b3IoZ2VuZGVyLCBsZXZlbHMgPSBjKDEsIDIsIDApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJtIiwgImYiLCAib3RoZXIiKSkpICU+JQogICAgICBmaWx0ZXIoYWdlX2FwcHJveCA+PSAxOCkgIyBleGNsdWRlIFBzIHdobyBhcmUgeW91bmdlciB0aGFuIDE4IHllYXJzCiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIHJlbGlnaW9uX2J1ZGRoaXNtOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24KICAgICAgICByZWxpZ2lvbl9idWRkaGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9idWRkaGlzbSksICIiLCAiYnVkZGhpc20gIikpLAogICAgICAgIHJlbGlnaW9uX2NocmlzdGlhbml0eSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9jaHJpc3RpYW5pdHkpLCAiIiwgImNocmlzdGlhbml0eSAiKSksCiAgICAgICAgcmVsaWdpb25faGluZHVpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faGluZHVpc20pLCAiIiwgImhpbmR1aXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9pc2xhbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9pc2xhbSksICIiLCAiaXNsYW0gIikpLAogICAgICAgIHJlbGlnaW9uX2phaW5pc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25famFpbmlzbSksICIiLCAiamFpbmlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fanVkYWlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9qdWRhaXNtKSwgIiIsICJqdWRhaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9zaWtoaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3Npa2hpc20pLCAiIiwgInNpa2hpc20gIikpLAogICAgICAgIHJlbGlnaW9uX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX290aGVyKSwgIiIsICJvdGhlciAiKSksCiAgICAgICAgcmVsaWdpb25fbm9uZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9ub25lKSwgIiIsICJub25lICIpKSwKICAgICAgICByZWxpZ2lvbl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJlbGlnaW9uX2NhdCA9IHBhc3RlMChyZWxpZ2lvbl9idWRkaGlzbSwgcmVsaWdpb25fY2hyaXN0aWFuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25faGluZHVpc20sIHJlbGlnaW9uX2lzbGFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25famFpbmlzbSwgcmVsaWdpb25fanVkYWlzbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX3Npa2hpc20sIHJlbGlnaW9uX290aGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25fbm9uZSwgcmVsaWdpb25fcHJlZm5vKSwKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uX2NhdCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Z2VuZGVyLCBmZWVkYmFjazpyYWNlX2NhdCwgcmVsaWdpb25fY2F0MykgJT4lCiAgICAgIHJlbmFtZShyZWxpZ2lvbl9jYXQgPSByZWxpZ2lvbl9jYXQzKQogICAgCiAgICAjIHJlbW92ZSBleHRyYW5lb3VzIGRmcyBhbmQgdmFyaWFibGVzCiAgICBybShkLCBkX2NsZWFuXzEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBkIDwtIGRfcmF3X3N0dWR5MwogICAgCiAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0guLmNoYXJhY3RlckwpIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYShDQVRDSC4uY2hhcmFjdGVyUiksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZpbmlzaGVkID09IDEsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSkpKSAlPiUKICAgICAgZmlsdGVyKENBVENILi5jaGFyYWN0ZXJMID09IDUsICMgZXhjbHVkZSBQcyB3aG8gZmFpbCBjYXRjaCB0cmlhbHMgCiAgICAgICAgICAgICBDQVRDSC4uY2hhcmFjdGVyUiA9PSA1LAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIHJlbGlnaW9uX2J1ZGRoaXNtOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24KICAgICAgICByZWxpZ2lvbl9idWRkaGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9idWRkaGlzbSksICIiLCAiYnVkZGhpc20gIikpLAogICAgICAgIHJlbGlnaW9uX2NocmlzdGlhbml0eSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9jaHJpc3RpYW5pdHkpLCAiIiwgImNocmlzdGlhbml0eSAiKSksCiAgICAgICAgcmVsaWdpb25faGluZHVpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faGluZHVpc20pLCAiIiwgImhpbmR1aXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9pc2xhbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9pc2xhbSksICIiLCAiaXNsYW0gIikpLAogICAgICAgIHJlbGlnaW9uX2phaW5pc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25famFpbmlzbSksICIiLCAiamFpbmlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fanVkYWlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9qdWRhaXNtKSwgIiIsICJqdWRhaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9zaWtoaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3Npa2hpc20pLCAiIiwgInNpa2hpc20gIikpLAogICAgICAgIHJlbGlnaW9uX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX290aGVyKSwgIiIsICJvdGhlciAiKSksCiAgICAgICAgcmVsaWdpb25fbm9uZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9ub25lKSwgIiIsICJub25lICIpKSwKICAgICAgICByZWxpZ2lvbl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJlbGlnaW9uX2NhdCA9IHBhc3RlMChyZWxpZ2lvbl9idWRkaGlzbSwgcmVsaWdpb25fY2hyaXN0aWFuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25faGluZHVpc20sIHJlbGlnaW9uX2lzbGFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25famFpbmlzbSwgcmVsaWdpb25fanVkYWlzbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX3Npa2hpc20sIHJlbGlnaW9uX290aGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25fbm9uZSwgcmVsaWdpb25fcHJlZm5vKSwKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uX2NhdCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Z2VuZGVyLCBmZWVkYmFjazpyYWNlX2NhdCwgcmVsaWdpb25fY2F0MykgJT4lCiAgICAgIHJlbmFtZShyZWxpZ2lvbl9jYXQgPSByZWxpZ2lvbl9jYXQzKQogICAgCiAgICAjIHJlbmFtZSByZXNwb25zZSB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMyA8LSBkX2NsZWFuXzIKICAgIG5hbWVzKGRfY2xlYW5fMykgPC0gZ3N1YigiZ2V0IiwgIiIsIG5hbWVzKGRfY2xlYW5fMykpCiAgICBuYW1lcyhkX2NsZWFuXzMpIDwtIGdzdWIoIlxcLiIsICIiLCBuYW1lcyhkX2NsZWFuXzMpKQogICAgbmFtZXMoZF9jbGVhbl8zKSA8LSBnc3ViKCJjaGFyIiwgIl9jaGFyIiwgbmFtZXMoZF9jbGVhbl8zKSkKICAgIG5hbWVzKGRfY2xlYW5fMylbbmFtZXMoZF9jbGVhbl8zKSAlaW4lIGMoIl9jaGFyYWN0ZXJMIiwgIl9jaGFyYWN0ZXJSIildIDwtIAogICAgICBjKCJjaGFyYWN0ZXJMIiwgImNoYXJhY3RlclIiKQogICAgCiAgICAjIHJlY29kZSByZXNwb25zZSB2YXJpYWJsZXMgKGNlbnRlcikKICAgIGRfY2xlYW5fNCA8LSBkX2NsZWFuXzMKICAgIGZvcihpIGluIDExOjkyKSB7CiAgICAgIGRfY2xlYW5fNFssaV0gPC0gZF9jbGVhbl80WyxpXSAtIDQgIyB0cmFuc2Zvcm0gZnJvbSAxIHRvIDcgLS0+IC0zIHRvIDMKICAgIH0KICAgIAogICAgIyByZWNvZGUgY2hhcmFjdGVyTCB2cy4gY2hhcmFjdGVyUiBhcyBiZWV0bGUgdnMuIHJvYm90CiAgICBkX2NsZWFuXzVfZGVtbyA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Y29uZGl0aW9uLCB5b2I6cmVsaWdpb25fY2F0KQogICAgCiAgICBkX2NsZWFuXzVfY2hhcmFjdGVyTCA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIG11dGF0ZSh0YXJnZXQgPSBjaGFyYWN0ZXJMKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIHRhcmdldCwgaGFwcHlfY2hhcmFjdGVyTDpDQVRDSF9jaGFyYWN0ZXJMKQogICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlckwpIDwtIGdzdWIoIl9jaGFyYWN0ZXJMIiwgIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlckwpKQogICAgCiAgICBkX2NsZWFuXzVfY2hhcmFjdGVyUiA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIG11dGF0ZSh0YXJnZXQgPSBjaGFyYWN0ZXJSKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIHRhcmdldCwgaGFwcHlfY2hhcmFjdGVyUjpDQVRDSF9jaGFyYWN0ZXJSKQogICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlclIpIDwtIGdzdWIoIl9jaGFyYWN0ZXJSIiwgIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlclIpKQogICAgCiAgICBkX2NsZWFuIDwtIGRfY2xlYW5fNV9jaGFyYWN0ZXJMICU+JQogICAgICBmdWxsX2pvaW4oZF9jbGVhbl81X2NoYXJhY3RlclIpICU+JQogICAgICBmdWxsX2pvaW4oZF9jbGVhbl81X2RlbW8pICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZCwgZGF0ZTpyZWxpZ2lvbl9jYXQsIHRhcmdldDpDQVRDSCkKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xLCBkX2NsZWFuXzIsIGRfY2xlYW5fMywgZF9jbGVhbl80LCBkX2NsZWFuXzVfY2hhcmFjdGVyTCwgCiAgICAgICBkX2NsZWFuXzVfY2hhcmFjdGVyUiwgZF9jbGVhbl81X2RlbW8sIGkpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBkIDwtIGRfcmF3X3N0dWR5NAoKICAgICAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0gpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCA9PSAxLCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBvbmUgY2hhcmFjdGVyCiAgICBkX2NsZWFuXzIgPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZSgKICAgICAgICBncmVwbCgidmVnZXRhdGl2ZSIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwgInB2cyIsCiAgICAgICAgaWZlbHNlKGdyZXBsKCJibHVlIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLCAiYmx1ZWpheSIsCiAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiY2hpbXAiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksICJjaGltcCIsCiAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSkpKSkpCgogICAgIyByZWNvZGUgYmFja2dyb3VuZCBhbmQgZGVtb2dyYXBoaWMgdmFyaWFibGVzCiAgICBkX2NsZWFuIDwtIGRfY2xlYW5fMiAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBudW1iZXIKICAgICAgICBzdHVkeSA9IGZhY3RvcihzdHVkeSkpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IGR1cmF0aW9uCiAgICAgICAgZHVyYXRpb24gPSBhcy5udW1lcmljKGRpZmZ0aW1lKHN0cnB0aW1lKGVuZF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycHRpbWUoc3RhcnRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID0gIm1pbnMiKSkpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJhY2UKICAgICAgICByYWNlX2FzaWFuX2Vhc3QgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9lYXN0KSwgIiIsICJhc2lhbl9lYXN0ICIpKSwKICAgICAgICByYWNlX2FzaWFuX3NvdXRoID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fc291dGgpLCAiIiwgImFzaWFuX3NvdXRoICIpKSwKICAgICAgICByYWNlX2FzaWFuX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fb3RoZXIpLCAiIiwgImFzaWFuX290aGVyICIpKSwKICAgICAgICByYWNlX2JsYWNrID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYmxhY2spLCAiIiwgImJsYWNrICIpKSwKICAgICAgICByYWNlX2hpc3BhbmljID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfaGlzcGFuaWMpLCAiIiwgImhpc3BhbmljICIpKSwKICAgICAgICByYWNlX21pZGRsZV9lYXN0ZXJuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbWlkZGxlX2Vhc3Rlcm4pLCAiIiwgIm1pZGRsZV9lYXN0ZXJuICIpKSwKICAgICAgICByYWNlX25hdGl2ZV9hbWVyaWNhbiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX25hdGl2ZV9hbWVyaWNhbiksICIiLCAibmF0aXZlX2FtZXJpY2FuICIpKSwKICAgICAgICByYWNlX3BhY19pc2xhbmRlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3BhY19pc2xhbmRlciksICIiLCAicGFjX2lzbGFuZGVyICIpKSwKICAgICAgICByYWNlX3doaXRlID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfd2hpdGUpLCAiIiwgIndoaXRlICIpKSwKICAgICAgICByYWNlX290aGVyX3ByZWZubyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX290aGVyX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByYWNlX2NhdCA9IHBhc3RlMChyYWNlX2FzaWFuX2Vhc3QsIHJhY2VfYXNpYW5fc291dGgsIHJhY2VfYXNpYW5fb3RoZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9ibGFjaywgcmFjZV9oaXNwYW5pYywgcmFjZV9taWRkbGVfZWFzdGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX25hdGl2ZV9hbWVyaWNhbiwgcmFjZV9wYWNfaXNsYW5kZXIsIHJhY2Vfd2hpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8pLAogICAgICAgIHJhY2VfY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByYWNlX2NhdCkpLAogICAgICAgIHJhY2VfY2F0MyA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoIiAiLCByYWNlX2NhdDIpID09IFQsICJtdWx0aXJhY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmFjZV9jYXQyKSkpKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQ6ZW5kX3RpbWUsIGR1cmF0aW9uLCBmaW5pc2hlZDpnZW5kZXIsIAogICAgICAgICAgICAgZWR1Y2F0aW9uOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykKICAgIAogICAgIyBmaWx0ZXIgY29uZGl0aW9ucyBpZiBkZXNpcmVkCiAgICBpZihpcy5lbGVtZW50KCJub25lIiwgY2hvc2VuRXhjbHVkZSkpIHt9IGVsc2UgewogICAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgICAgZmlsdGVyKCFjb25kaXRpb24gJWluJSBjaG9zZW5FeGNsdWRlKQogICAgfQogICAgCiAgICAjIHJlbW92ZSBleHRyYW5lb3VzIGRmcyBhbmQgdmFyaWFibGVzCiAgICBybShkLCBkX2NsZWFuXzEsIGRfY2xlYW5fMikKICB9CiAgCiMgICAjIHRyYW5zZm9ybSB0byAwIHRvIDYgc2NhbGUKIyAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKIyAgICAgZ2F0aGVyKG1jLCBzY29yZSwgaGFwcHk6cHJpZGUpICU+JQojICAgICBtdXRhdGUoc2NvcmUgPSBzY29yZSArIDMpICU+JSAjIHRyYW5zZm9ybSBmcm9tIC0zIHRvIDMgLS0+IDAgdG8gNgojICAgICBzcHJlYWQobWMsIHNjb3JlKQogIAogICMgcmVtb3ZlIG91dGxpZXJzCiAgaWYoY2hvc2VuT3V0bGllckhhbmRsaW5nID09ICJyZW1vdmUiKSB7CiAgICAKICAgIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICAgICAgICBmaWx0ZXIoIXNjb3JlICVpbiUgYm94cGxvdC5zdGF0cyhzY29yZSwgMi41KSRvdXQpICU+JQogICAgICAgIHNwcmVhZChtYywgc2NvcmUpICU+JQogICAgICAgIGFycmFuZ2UoY29uZGl0aW9uLCBzdWJpZCkKICAgIH0KICAgIAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgICBncm91cF9ieSh0YXJnZXQsIG1jKSAlPiUKICAgICAgICBmaWx0ZXIoIXNjb3JlICVpbiUgYm94cGxvdC5zdGF0cyhzY29yZSwgMi41KSRvdXQpICU+JQogICAgICAgIHNwcmVhZChtYywgc2NvcmUpICU+JQogICAgICAgIGFycmFuZ2UodGFyZ2V0LCBzdWJpZCkKICAgIH0KICAgIAogIH0KICAKICAjIGZpbHRlciBpdGVtcyBpZiBkZXNpcmVkCiAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGVJdGVtKSkge30gZWxzZSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLWNvbnRhaW5zKGNob3NlbkV4Y2x1ZGVJdGVtKSkKICB9CgogICMgcmV0dXJuIGNsZWFuZWQgZGF0YXNldAogIHJldHVybihkX2NsZWFuKQp9CgojIG1ha2UgZnVuY3Rpb24gZm9yIHN0cmlwcGluZyBkYXRhZnJhbWVzIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbgptYWtlRFJERiA8LSBmdW5jdGlvbihkYXRhc291cmNlLCBjaG9zZW5Db25kaXRpb24pIHsKICAKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXsKICAgICMgcmVuYW1lIHZhcmlhYmxlcyBmb3IgZWFzZSBvZiBmdW5jdGlvbiBhcHBscGljYXRpb24KICAgIGQgPC0gZDMgJT4lCiAgICAgIHJlbmFtZShvcmRlciA9IGNvbmRpdGlvbiwKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRhcmdldCkKICAgIAogICAgIyByZW5hbWUgc3ViaWRzIGJ5IGNvbmRpdGlvbiBpZiBjb2xsYXBzZXMgYWNyb3NzIGNvbmRpdGlvbnMKICAgIGQgPC0gZCAlPiUKICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY29uZGl0aW9uLCBzdWJpZCwgc2VwID0gIl8iKSkKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgCiAgIyBmaWx0ZXIgYnkgY29uZGl0aW9uIGlmIHNwZWNpZmllZAogIGlmKGNob3NlbkNvbmRpdGlvbiAlaW4lIGMoImJlZXRsZSIsICJyb2JvdCIpKSB7CiAgICBkIDwtIGQgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gY2hvc2VuQ29uZGl0aW9uKQogIH0KICAKICAjIG1ha2Ugc3RyaXBwZWQgZGF0YWZyYW1lIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbiBhbmFseXNlcwogIGRfc3RyaXAgPC0gZCAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQsIGhhcHB5OnByaWRlKQogIGRfc3RyaXAgPC0gZGF0YS5mcmFtZShkX3N0cmlwWywtMV0sIHJvdy5uYW1lcyA9IGRfc3RyaXAkc3ViaWQpCiAgCiAgIyByZXR1cm4gc3RyaXBwZWQgZGF0YWZyYW1lCiAgcmV0dXJuKGRfc3RyaXApCn0KCiMgcGFyYW1ldGVycyAtLS0tLQpjaG9zZW5PdXRsaWVySGFuZGxpbmcgPC0gImtlZXAiCmNob3NlbkV4Y2x1ZGUgPC0gIm5vbmUiCmNob3NlbkV4Y2x1ZGVJdGVtIDwtICJub25lIgpjaG9zZW5Db3JUeXBlIDwtICJjb3IiICMgcGVhcnNvbiBjb3JyZWxhdGlvbgpjaG9zZW5Sb3RUeXBlIDwtICJ2YXJpbWF4IiAjIHZhcmltYXggcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJvYmxpbWluIiAjIG9ibGltaW4gcm90YXRpb24KCiMgcmF3IGRhdGEgLS0tLS0KIyBzdHVkeSAxICgyMDE1LTEyLTE1LCAyIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5MSA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vMjl2bmcvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIpCgojIHN0dWR5IDIgKDIwMTYtMDEtMTIsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cyAtIFJFUExJQ0FUSU9OKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2c3NmhqL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKIyBzdHVkeSAzICgyMDE2LTAxLTEwLCAyIGNvbmRpdGlvbnMsIHdpdGhpbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9lcHlrZi9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIikKCiMgc3R1ZHkgNCAoMjAxNi0wMS0xNCwgMjEgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHk0IDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9rZHpnZS9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKCiMgZGF0YSBjbGVhbnVwIC0tLS0tCmQxIDwtIGNsZWFudXAoInN0dWR5IDEiKQpkMiA8LSBjbGVhbnVwKCJzdHVkeSAyIikKZDMgPC0gY2xlYW51cCgic3R1ZHkgMyIpCmQ0IDwtIGNsZWFudXAoInN0dWR5IDQiKQoKIyBkYXRhZnJhbWVzIGZvciBkaW0gcmVkdWN0aW9uIC0tLS0tCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzMQpkMV9hbGwgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAyCmQyX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDMKZDNfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgNApkNF9hbGwgPC0gbWFrZURSREYoInN0dWR5IDQiLCAiYWxsIikKCiMgcmVuYW1lIGZvciBjdXJyZW50IHB1cnBvc2VzIC0tLS0tCnBuYXNfZDFfYWxsIDwtIGQxX2FsbApwbmFzX2QyX2FsbCA8LSBkMl9hbGwKcG5hc19kM19hbGwgPC0gZDNfYWxsCnBuYXNfZDRfYWxsIDwtIGQ0X2FsbAoKIyBnZXQgcmlkIG9mIGV4dHJhbmVvdXMgc3R1ZmYKcm0ocm91bmQyLCBjbGVhbnVwLCBtYWtlRFJERiwgY2hvc2VuT3V0bGllckhhbmRsaW5nLCBjaG9zZW5FeGNsdWRlLCBjaG9zZW5FeGNsdWRlSXRlbSwgY2hvc2VuQ29yVHlwZSwgY2hvc2VuUm90VHlwZSwgZF9yYXdfc3R1ZHkxLCBkX3Jhd19zdHVkeTIsIGRfcmF3X3N0dWR5MywgZF9yYXdfc3R1ZHk0LCBkMSwgZDIsIGQzLCBkNCwgZDFfYWxsLCBkMl9hbGwsIGQzX2FsbCwgZDRfYWxsKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KIyBtYWtlIHJvdW5kaW5nIGZ1bmN0aW9uCnJvdW5kMiA8LSBmdW5jdGlvbih4KSB7Zm9ybWF0KHJvdW5kKHgsIDIpLCBuc21hbGwgPSAyKX0KCiMgbWFrZSBjbGVhbnVwIGZ1bmN0aW9uCmNsZWFudXAgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSwgYWdlX2dyb3VwKSB7CiAgaWYoZ3JlcGwoImFkdWx0IiwgYWdlX2dyb3VwKSkgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZF9yYXdfc3R1ZHkxfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGRfcmF3X3N0dWR5MWJ9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZF9yYXdfc3R1ZHkxY30KICAgIAogICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkCiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIGV0aG5pY2l0eSkpLAogICAgICAgIHJhY2VfY2F0MyA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoIiAiLCByYWNlX2NhdDIpID09IFQsICJtdWx0aXJhY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmFjZV9jYXQyKSkpKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQ6Y291bnRyeV9zZWxmcmVwLCBhZ2VfZ3JvdXAsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24gKG5vdGU6IG9ubHkgZGVhbGluZyB3aXRoIGNoaWxkaG9vZCByZWxpZ2lvbiBmb3Igbm93KQogICAgICAgIHJlbGlnaW9uX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmVsaWdpb25DaGlsZCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xKQogIH0KICAKICBpZihncmVwbCgiY2hpbGQiLCBhZ2VfZ3JvdXApKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkX3Jhd19zdHVkeTJ9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkX3Jhd19zdHVkeTN9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkX3Jhd19zdHVkeTR9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkX3Jhd19zdHVkeTV9CiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbl8yIDwtIGQgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpLAogICAgICAgIHJlc3BvbnNlTnVtID0gaWZlbHNlKCFpcy5uYShyZXNwb25zZU51bSksIHJlc3BvbnNlTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZXNwb25zZSA9PSAibm8iLCAwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHJlc3BvbnNlID09ICJraW5kYSIsIDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmVzcG9uc2UgPT0gInllcyIsIDEsIE5BKSkpKSkKICAgICMgTk9URTogbmVlZCB0byByZWNvbmNpbGUgcmFjZS9ldGhuaWNpdHkgYXQgc29tZSBwb2ludC4uLgogICAgIyBOT1RFOiBuZWVkIHRvIGRlYWwgd2l0aCBnZW5kZXIgYXQgc29tZSBwb2ludC4uLgogIAogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzIKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8yKQogIH0KICAKICAjIHJlbW92ZSBvdXRsaWVycyBpZiBkZXNpcmVkCiAgaWYoY2hvc2VuT3V0bGllckhhbmRsaW5nID09ICJyZW1vdmUiKSB7CiAgICAKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgZ2F0aGVyKGNhcGFjaXR5LCBzY29yZSwgaGFwcHk6cHJpZGUpICU+JQogICAgICBncm91cF9ieShjaGFyYWN0ZXIsIGNhcGFjaXR5KSAlPiUKICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgc3ByZWFkKGNhcGFjaXR5LCBzY29yZSkgJT4lCiAgICAgIGFycmFuZ2UoY2hhcmFjdGVyLCBzdWJpZCkKICAgIAogIH0KICAKICAjIGZpbHRlciBjaGFyYWN0ZXJzIGlmIGRlc2lyZWQKICBpZihpcy5lbGVtZW50KCJub25lIiwgY2hvc2VuRXhjbHVkZSkpIHt9IGVsc2UgewogICAgCiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIGZpbHRlcighY2hhcmFjdGVyICVpbiUgY2hvc2VuRXhjbHVkZSkKICAgIAogICAgfQogICAgCiAgIyBmaWx0ZXIgaXRlbXMgaWYgZGVzaXJlZAogIGlmKGlzLmVsZW1lbnQoIm5vbmUiLCBjaG9zZW5FeGNsdWRlSXRlbSkpIHt9IGVsc2UgewogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBkcGx5cjo6ZmlsdGVyKCFjYXBhY2l0eSAlaW4lIGNob3NlbkV4Y2x1ZGVJdGVtKQogIH0KICAKICAjIGRyb3AgdHJpYWxzIDwyNTAgbXMKICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICBmaWx0ZXIocnQgPj0gMjUwIHwgaXMubmEocnQpKQogIAogICMgY2VudGVyIHJlc3BvbnNlIHZhcmlhYmxlCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIG11dGF0ZShyZXNwb25zZU51bUMgPSByZXNwb25zZU51bSAtIDQpCiAgfSBlbHNlIHsKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgbXV0YXRlKHJlc3BvbnNlTnVtQyA9IHJlc3BvbnNlTnVtIC0gMC41KQogIH0KCiAgICAjIHJlbmFtZSBjaGFyYWN0ZXIgbmFtZSB2YXJpYWJsZXMKICBpZigiY2hhck5hbWUiICVpbiUgbmFtZXMoZF9jbGVhbikpIHsKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUgcmVuYW1lKGNoYXJhY3RlciA9IGNoYXJOYW1lKQogIH0KICAKICAjIGNsZWFudXAKICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICBmaWx0ZXIoIWlzLm5hKHN1YmlkKSwgIWlzLm5hKGNoYXJhY3RlciksICFpcy5uYShjYXBhY2l0eSkpCiAgCiAgIyByZXR1cm4gY2xlYW5lZCBkYXRhc2V0CiAgcmV0dXJuKGRfY2xlYW4pCn0KCiMgbWFrZSBmdW5jdGlvbiBmb3Igc3RyaXBwaW5nIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9uCm1ha2VEUkRGIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UsIGNob3NlbkNvbmRpdGlvbikgewogIAogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGQxYn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZDFjfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDUiKXtkIDwtIGQ1fQoKICAjIGZpbHRlciBieSBjaGFyYWN0ZXIgaWYgc3BlY2lmaWVkCiAgaWYoY2hvc2VuQ29uZGl0aW9uICVpbiUgYygiYmVldGxlIiwgInJvYm90IikpIHsKICAgIGQgPC0gZCAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSBjaG9zZW5Db25kaXRpb24pCiAgfQoKICAjIG1ha2Ugc3RyaXBwZWQgZGF0YWZyYW1lIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbiBhbmFseXNlcwogIGRfc3RyaXAgPC0gZCAlPiUKICAgIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSwgIWlzLm5hKHN1YmlkKSwgIWlzLm5hKGNhcGFjaXR5KSwgY2FwYWNpdHkgIT0gIiIpICU+JQogICAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY2hhcmFjdGVyLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgICBzZWxlY3Qoc3ViaWQsIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICBzcHJlYWQoY2FwYWNpdHksIHJlc3BvbnNlTnVtKSAlPiUKICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJzdWJpZCIpCgogICMgcmV0dXJuIHN0cmlwcGVkIGRhdGFmcmFtZQogIHJldHVybihkX3N0cmlwKQp9CgojIG1ha2UgZGVtb2dyYXBoaWNzIGZ1bmN0aW9ucwpkZW1vU2FtcGxlU2l6ZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGQxYn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZDFjfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDUiKXtkIDwtIGQ1fQoKICAjIGdldCBkaXN0aW5jdCBzdWJpZHMKICBzYW1wbGVfc2l6ZSA8LSBkICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSAlPiUgY291bnQoY2hhcmFjdGVyKSAlPiUgZGF0YS5mcmFtZSgpCgogICMgYWRkIHRvdGFsIHNhbXBsZSBzaXplICAKICBzYW1wbGVfc2l6ZSA8LSByYmluZChzYW1wbGVfc2l6ZSAlPiUgbXV0YXRlKGNoYXJhY3RlciA9IGFzLmNoYXJhY3RlcihjaGFyYWN0ZXIpKSwKICAgICAgICAgICAgICAgICAgICAgICBjKGNoYXJhY3RlciA9ICJhbGwiLCBuID0gZCAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKCkpKQogIAogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihzYW1wbGVfc2l6ZSkKfQpkZW1vRHVyYXRpb24gPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkNX0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNoYXJhY3RlcgogIGR1cmF0aW9uIDwtIGQgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBkdXJhdGlvbikgJT4lCiAgICBtdXRhdGUoZHVyYXRpb24gPSBhcy5udW1lcmljKGR1cmF0aW9uKSkgJT4lCiAgICBncm91cF9ieShjaGFyYWN0ZXIpICU+JQogICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVkaWFuX2R1cmF0aW9uID0gbWVkaWFuKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24sIG5hLnJtID0gVCkpCgogICMgYWRkIHRvdGFsIGR1cmF0aW9uCiAgYWxsIDwtIGQgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBkdXJhdGlvbikgJT4lCiAgICBtdXRhdGUoZHVyYXRpb24gPSBhcy5udW1lcmljKGR1cmF0aW9uKSkgJT4lCiAgICBzdW1tYXJpc2UobWluX2R1cmF0aW9uID0gbWluKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1heF9kdXJhdGlvbiA9IG1heChkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWRpYW5fZHVyYXRpb24gPSBtZWRpYW4oZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVhbl9kdXJhdGlvbiA9IG1lYW4oZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgc2RfZHVyYXRpb24gPSBzZChkdXJhdGlvbiwgbmEucm0gPSBUKSkgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gImFsbCIpCiAgCiAgZHVyYXRpb24gPC0gcmJpbmQoZHVyYXRpb24sIGFsbCkgIyBub3Qgc3VyZSB3aHkgZnVsbF9qb2luIGRvZXNuJ3Qgd29yayAgICAKCiAgIyByZXR1cm4gZGF0YWZyYW1lCiAgcmV0dXJuKGR1cmF0aW9uKQp9CmRlbW9BZ2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkNX0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNoYXJhY3RlcgogIGFnZSA8LSBkICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSAlPiUKICAgIG11dGF0ZShhZ2UgPSBhcy5udW1lcmljKGFnZSkpICU+JQogICAgZ3JvdXBfYnkoY2hhcmFjdGVyKSAlPiUKICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWRpYW5fYWdlID0gbWVkaWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZSwgbmEucm0gPSBUKSkKCiAgIyBhZGQgdG90YWwgYWdlCiAgYWxsIDwtIGQgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBhZ2UpICU+JQogICAgbXV0YXRlKGFnZSA9IGFzLm51bWVyaWMoYWdlKSkgJT4lCiAgICBzdW1tYXJpc2UobWluX2FnZSA9IG1pbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBzZF9hZ2UgPSBzZChhZ2UsIG5hLnJtID0gVCkpICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9ICJhbGwiKQogIGFnZSA8LSBmdWxsX2pvaW4oYWdlLCBhbGwpCgogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihhZ2UpCn0KZGVtb0dlbmRlciA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGQxYn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZDFjfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDUiKXtkIDwtIGQ1fQoKICAjIGdldCBnZW5kZXIgcGVyIGNoYXJhY3RlciBhbmQgb3ZlcmFsbAogIGdlbmRlciA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBnZW5kZXIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUoY2hhcmFjdGVyLCBnZW5kZXIpKSkpICU+JQogICAgZmlsdGVyKGdlbmRlciAhPSAiU3VtIikgJT4lCiAgICByZW5hbWUobiA9IEZyZXEpCiAgCiAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoaWZlbHNlKGNoYXJhY3RlciA9PSAiU3VtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY2hhcmFjdGVyKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjaGFyYWN0ZXIsIGdlbmRlcikgJT4lCiAgICBzcHJlYWQoZ2VuZGVyLCBuKQogIAogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihnZW5kZXIpCn0KZGVtb1JhY2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkNX0KCiAgIyBnZXQgcmFjZSBwZXIgY2hhcmFjdGVyIGFuZCBvdmVyYWxsCiAgcmFjZSA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCByYWNlX2NhdCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUoY2hhcmFjdGVyLCByYWNlX2NhdCkpKSkgJT4lCiAgICBmaWx0ZXIocmFjZV9jYXQgIT0gIlN1bSIpICU+JQogICAgcmVuYW1lKG4gPSBGcmVxKQoKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihpZmVsc2UoY2hhcmFjdGVyID09ICJTdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNoYXJhY3RlcikpKSkgJT4lCiAgICAgIGFycmFuZ2UoY2hhcmFjdGVyLCByYWNlX2NhdCkgJT4lCiAgICAgIHNwcmVhZChyYWNlX2NhdCwgbikKICAKICAjIHJldHVybiBkYXRhZnJhbWUKICByZXR1cm4ocmFjZSkKfQoKIyBwbG90dGluZyBmdW5jdGlvbnMKbWFrZUZhY2V0TGFicyA8LSBmdW5jdGlvbihkZl9wbG90dGluZykgewogIGZhY2V0X2xhYmVscyA8LSBhcnJheSgpCiAgZGZfcGxvdHRpbmcgPC0gZGZfcGxvdHRpbmcgJT4lIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSkKICBmb3IoaSBpbiAxOmxlbmd0aChsZXZlbHMoZGZfcGxvdHRpbmckY2hhcmFjdGVyKSkpIHsKICAgIGRmIDwtIGRmX3Bsb3R0aW5nICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09IGxldmVscyhkZl9wbG90dGluZyRjaGFyYWN0ZXIpW2ldKSAlPiUKICAgICAgc2VsZWN0KGNoYXJhY3RlciwgbikgJT4lIHVuaXF1ZSgpCiAgICBmYWNldF9sYWJlbHNbaV0gPC0gcGFzdGUwKGRmJGNoYXJhY3RlciwgIiAobiA9ICIsIGRmJG4sICIpIikKICB9CiAgbmFtZXMoZmFjZXRfbGFiZWxzKSA8LSBsZXZlbHMoZGZfcGxvdHRpbmckY2hhcmFjdGVyKQogIHJldHVybihmYWNldF9sYWJlbHMpCn0KYGBgCgpgYGB7ciBtb2RlbGluZyBkZWNpc2lvbnMsIGluY2x1ZGUgPSBGfQojIHJlbW92ZSBvdXRsaWVycz8KY2hvc2VuT3V0bGllckhhbmRsaW5nIDwtICJrZWVwIgojIGNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAicmVtb3ZlIgoKIyBleGNsdWRlIGFueSBjb25kaXRpb25zIChjaGFyYWN0ZXJzKT8KY2hvc2VuRXhjbHVkZSA8LSAibm9uZSIKIyBjaG9zZW5FeGNsdWRlIDwtIGMoInN0YXBsZXIiLCAiY2FyIiwgImNvbXB1dGVyIikKCiMgZXhjbHVkZSBhbnkgaXRlbXMgKG1lbnRhbCBjYXBhY2l0aWVzKT8KIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAibm9uZSIKIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAiY29tcHV0YXRpb25zIgpjaG9zZW5FeGNsdWRlSXRlbSA8LSBjKCJtZXRhbCIsICJvbl9vZmYiKQoKIyBOT1RFOiBhbHdheXMgY2hvb3NlIG1pbmltYWwgcmVzaWR1YWwgKGZtID0gIm1pbnJlcyIpIGluc3RlYWQgb2YgTUwgYmVjYXVzZSBvZiBub24tbm9ybWFsaXR5CgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2YgY29ycmVsYXRpb24/CmNob3NlbkNvclR5cGUgPC0gImNvciIgIyBwZWFyc29uIGNvcnJlbGF0aW9uCiMgY2hvc2VuQ29yVHlwZSA8LSAicG9seSIgIyBwb2x5Y2hvcmljIGNvcnJlbGF0aW9uCgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2Ygcm90YXRpb24/CiMgY2hvc2VuUm90VHlwZSA8LSAidmFyaW1heCIgIyB2YXJpbWF4IHJvdGF0aW9uCmNob3NlblJvdFR5cGUgPC0gIm9ibGltaW4iICMgb2JsaW1pbiByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm5vbmUiICMgbm8gcm90YXRpb24KCmRhdGEuZnJhbWUoImNvbmRpdGlvbnNFeGNsdWRlZCIgPSBjaG9zZW5FeGNsdWRlLAogICAgICAgICAgICJvdXRsaWVySGFuZGxpbmciID0gY2hvc2VuT3V0bGllckhhbmRsaW5nLAogICAgICAgICAgICJFRkFfY29ycmVsYXRpb24iID0gY2hvc2VuQ29yVHlwZSwKICAgICAgICAgICAiRUZBX3JvdGF0aW9uIiA9IGNob3NlblJvdFR5cGUpCmBgYAoKIyBEYXRhIHByZXBhcmF0aW9uCgpgYGB7ciBkYXRhIHVwbG9hZCwgaW5jbHVkZSA9IEZ9CiMgc3R1ZHkgMSAoMjAxNi0wNy0wNiwgYWR1bHRzLCAyIGNvbmRpdGlvbnMsIDMtcG9pbnQgc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHkxIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDFfMjAxNi0wNi0wNV9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIiwgYWdlX2dyb3VwID0gImFkdWx0cyIpICU+JSBzZWxlY3QoLVgpCgojIHN0dWR5IDFiICgyMDE3LTA3LTE5LCBhZHVsdHMsIDIgY29uZGl0aW9ucywgNy1wb2ludCBzY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTFiIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDJfMjAxNi0wNy0xOV9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxYiIsIGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUgc2VsZWN0KC1YKQoKIyBzdHVkeSAxYyAoMjAxNi0xMi0wOCwgYWR1bHRzLCAyIGNvbmRpdGlvbnMsIDMtcG9pbnQgc2NhbGUsICJoYXZlIGZyZWUgd2lsbCIgYW5kICJoYXZlIGludGVudGlvbnMiKQpkX3Jhd19zdHVkeTFjIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDNfMjAxNi0xMi0wOF9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxYyIsIGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUgc2VsZWN0KC1YKQoKIyBzdHVkeSAyIChKdW5lIC0gRGVjZW1iZXIgMjAxNiwgNy05eW8sIDIgY29uZGl0aW9ucywgMy1wb2ludC1zY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAxXzIwMTctMDctMjRfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMiIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbl83OSIpICU+JSBzZWxlY3QoLVgpCgojIHN0dWR5IDMgKEphbnVhcnkgLSBKdW5lIDIwMTcsIDctOXlvLCA5IGNvbmRpdGlvbnMsIDMtcG9pbnQtc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMl8yMDE3LTA4LTA4X2Fub255bWl6ZWQuY3N2IikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDMiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW5fNzkiKSAlPiUgc2VsZWN0KC1YKSAlPiUKICBtdXRhdGUoZG9iID0gcGFyc2VfZGF0ZXRpbWUoZGF0ZU9mQmlydGgsICIlbS8lZC8leSIpLAogICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLCAKICAgICAgICAgYWdlID0gaW50ZXJ2YWwoc3RhcnQgPSBkb2IsIGVuZCA9IGRvdCkgLyBkdXJhdGlvbihudW0gPSAxLCB1bml0cyA9ICJ5ZWFycyIpKSAlPiUKICBzZWxlY3QoLWRhdGVPZkJpcnRoLCAtZGF0ZU9mVGVzdCwgLWRvYiwgLWRvdCkKCiMgc3R1ZHkgNCAoTWF5IDIwMTcgLSBwcmVzZW50LCA0LTZ5bywgOSBjb25kaXRpb25zLCAzLXBvaW50LXNjYWxlLCAiZGVjaWRlIHdoYXQgdG8gZG8iIGFuZCAibWFrZSBwbGFucyIpCmRfcmF3X3N0dWR5NCA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDNfMjAxNy0wOC0yMV9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IiwgYWdlX2dyb3VwID0gImNoaWxkcmVuXzQ2IikgJT4lIHNlbGVjdCgtWCkgJT4lCiAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgZG90ID0gcGFyc2VfZGF0ZXRpbWUoZ3N1YigiMjAxNyIsICIxNyIsIGRhdGVPZlRlc3QpLCAiJW0vJWQvJXkiKSwgCiAgICAgICAgIGFnZSA9IGludGVydmFsKHN0YXJ0ID0gZG9iLCBlbmQgPSBkb3QpIC8gZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSkgJT4lCiAgc2VsZWN0KC1kYXRlT2ZCaXJ0aCwgLWRhdGVPZlRlc3QsIC1kb2IsIC1kb3QpCgojIHN0dWR5IDUgKEZhbGwgMjAxNyAtIHByZXNlbnQsIDUuNS03LjV5byAocGx1cyksIDkgY29uZGl0aW9ucywgMy1wb2ludC1zY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTUgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTA0XzIwMTctMTAtMTBfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgNSIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbl81LjU3LjUiKSAlPiUgc2VsZWN0KC1YKSAlPiUKICBtdXRhdGUoZG9iID0gcGFyc2VfZGF0ZXRpbWUoZGF0ZU9mQmlydGgsICIlbS8lZC8leSIpLAogICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLCAKICAgICAgICAgYWdlID0gaW50ZXJ2YWwoc3RhcnQgPSBkb2IsIGVuZCA9IGRvdCkgLyBkdXJhdGlvbihudW0gPSAxLCB1bml0cyA9ICJ5ZWFycyIpKSAlPiUKICBzZWxlY3QoLWRhdGVPZkJpcnRoLCAtZGF0ZU9mVGVzdCwgLWRvYiwgLWRvdCkKYGBgCgpgYGB7ciBkYXRhIGNsZWFudXAsIGluY2x1ZGUgPSBGfQojIGNsZWFuIHVwIGRhdGFzZXRzCmQxIDwtIGNsZWFudXAoInN0dWR5IDEiLCAiYWR1bHRzIikKZDFiIDwtIGNsZWFudXAoInN0dWR5IDEiLCAiYWR1bHRzIikKZDFjIDwtIGNsZWFudXAoInN0dWR5IDEiLCAiYWR1bHRzIikKZDIgPC0gY2xlYW51cCgic3R1ZHkgMiIsICJjaGlsZHJlbiIpCmQzIDwtIGNsZWFudXAoInN0dWR5IDMiLCAiY2hpbGRyZW4iKQpkNCA8LSBjbGVhbnVwKCJzdHVkeSA0IiwgImNoaWxkcmVuIikKZDUgPC0gY2xlYW51cCgic3R1ZHkgNSIsICJjaGlsZHJlbiIpCgojIHR3ZWFrIGJ5IGhhbmQKZDIgPC0gZDIgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBmaWx0ZXIoYWdlID49IDcsIGFnZSA8IDEwKSAlPiUKICBmaWx0ZXIoY2hhcmFjdGVyICE9ICJlbGVwaGFudCIpCgpkM19vdXRzaWRlYWdlIDwtIGQzICU+JSBmaWx0ZXIoYWdlIDwgNyB8IGFnZSA+PSAxMCkgJT4lIGRpc3RpbmN0KHN1YmlkKQoKZDMgPC0gZDMgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgIT0gIiIpICU+JQogIGZpbHRlcighc3ViaWQgJWluJSBkM19vdXRzaWRlYWdlJHN1YmlkKSAlPiUKICAjIGZpbHRlcihhZ2UgPj0gNywgYWdlIDwgMTApICU+JQogIG11dGF0ZShldGhuaWNpdHkgPSBnc3ViKCIgU04iLCAiIiwgZXRobmljaXR5KSkgJT4lCiAgbXV0YXRlKHJhY2VfY2F0ID0gaWZlbHNlKGdyZXBsKCJiaW5nIiwgdG9sb3dlcih0ZXN0aW5nU2l0ZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJBIiwgImVhc3RfYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQyIgfCBldGhuaWNpdHkgPT0gIkNqIiwgIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJJIiwgInNvdXRoX2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiTUUiLCAibWlkZGxlX2Vhc3Rlcm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQWYiLCAiYmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkgiLCAiaGlzcGFuaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIiAiLCBldGhuaWNpdHkpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIi8iLCBldGhuaWNpdHkpLCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJibGFjayBvciBhZnJpY2FuIGFtZXJpY2FuIiwgImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gImhpc3BhbmljIG9yIGxhdGluby9hIiwgImhpc3BhbmljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJlYXN0IGFzaWFuIiwgImVhc3RfYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJuYXRpdmUgYW1lcmljYW4sIGFtZXJpY2FuIGluZGlhbiwgb3IgYWxhc2thIG5hdGl2ZSIsICJuYXRpdmVfYW1lcmljYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAid2hpdGUiIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvbG93ZXIoZXRobmljaXR5KSA9PSAid2hpdGUsIGNhdWNhc2lhbiwgb3IgZXVyb3BlYW4gYW1lcmljYW4iLCAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gInNvdXRoIG9yIHNvdXRoZWFzdCBhc2lhbiIgfCB0b2xvd2VyKGV0aG5pY2l0eSkgPT0gInNvdXRoIGFzaWFuIiwgInNvdXRoX2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiIiB8IGlzLm5hKGV0aG5pY2l0eSksIE5BLCAibXVsdGlyYWNpYWwiKSkpKSkpKSkpCgpkNCA8LSBkNCAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlciksIGNoYXJhY3RlciAhPSAiIikgJT4lCiAgZmlsdGVyKGFnZSA+PSA0LCBhZ2UgPCA3KSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gZ3N1YigiIFNOIiwgIiIsIGV0aG5pY2l0eSkpICU+JQogIG11dGF0ZShyYWNlX2NhdCA9IGlmZWxzZShncmVwbCgiYmluZyIsIHRvbG93ZXIodGVzdGluZ1NpdGUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQSIsICJlYXN0X2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkMiIHwgZXRobmljaXR5ID09ICJDaiIsICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiSSIsICJzb3V0aF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIk1FIiwgIm1pZGRsZV9lYXN0ZXJuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkFmIiwgImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJIIiwgImhpc3BhbmljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCIgIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCIvIiwgZXRobmljaXR5KSwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiYmxhY2sgb3IgYWZyaWNhbiBhbWVyaWNhbiIsICJibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJoaXNwYW5pYyBvciBsYXRpbm8vYSIsICJoaXNwYW5pYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiZWFzdCBhc2lhbiIsICJlYXN0X2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAibmF0aXZlIGFtZXJpY2FuLCBhbWVyaWNhbiBpbmRpYW4sIG9yIGFsYXNrYSBuYXRpdmUiLCAibmF0aXZlX2FtZXJpY2FuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIndoaXRlIiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIndoaXRlLCBjYXVjYXNpYW4sIG9yIGV1cm9wZWFuIGFtZXJpY2FuIiwgIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJzb3V0aCBvciBzb3V0aGVhc3QgYXNpYW4iIHwgdG9sb3dlcihldGhuaWNpdHkpID09ICJzb3V0aCBhc2lhbiIsICJzb3V0aF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIiIgfCBpcy5uYShldGhuaWNpdHkpLCBOQSwgIm11bHRpcmFjaWFsIikpKSkpKSkpKQoKZDUgPC0gZDUgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgIT0gIiIpICU+JQogIGZpbHRlcihhZ2UgPj0gNS41LCBhZ2UgPCA3LjUpICU+JQogIG11dGF0ZShldGhuaWNpdHkgPSBnc3ViKCIgU04iLCAiIiwgZXRobmljaXR5KSkgJT4lCiAgbXV0YXRlKHJhY2VfY2F0ID0gaWZlbHNlKGdyZXBsKCJiaW5nIiwgdG9sb3dlcih0ZXN0aW5nU2l0ZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJBIiwgImVhc3RfYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQyIgfCBldGhuaWNpdHkgPT0gIkNqIiwgIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJJIiwgInNvdXRoX2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiTUUiLCAibWlkZGxlX2Vhc3Rlcm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQWYiLCAiYmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkgiLCAiaGlzcGFuaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIiAiLCBldGhuaWNpdHkpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIi8iLCBldGhuaWNpdHkpLCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJibGFjayBvciBhZnJpY2FuIGFtZXJpY2FuIiwgImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gImhpc3BhbmljIG9yIGxhdGluby9hIiwgImhpc3BhbmljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJlYXN0IGFzaWFuIiwgImVhc3RfYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJuYXRpdmUgYW1lcmljYW4sIGFtZXJpY2FuIGluZGlhbiwgb3IgYWxhc2thIG5hdGl2ZSIsICJuYXRpdmVfYW1lcmljYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAid2hpdGUiIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvbG93ZXIoZXRobmljaXR5KSA9PSAid2hpdGUsIGNhdWNhc2lhbiwgb3IgZXVyb3BlYW4gYW1lcmljYW4iLCAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gInNvdXRoIG9yIHNvdXRoZWFzdCBhc2lhbiIgfCB0b2xvd2VyKGV0aG5pY2l0eSkgPT0gInNvdXRoIGFzaWFuIiwgInNvdXRoX2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiIiB8IGlzLm5hKGV0aG5pY2l0eSksIE5BLCAibXVsdGlyYWNpYWwiKSkpKSkpKSkpCmBgYAoKYGBge3IgZGF0YWZyYW1lcyBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24sIGluY2x1ZGUgPSBGfQojIG1ha2UgZGF0YWZyYW1lcyBmb3IgczEKIyBkMV9iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYmVldGxlIikKIyBkMV9yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJyb2JvdCIpCmQxX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIGZvbGxvdy11cCBzdHVkaWVzIHRvIHMxCmQxYl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDFiIiwgImFsbCIpCmQxY19hbGwgPC0gbWFrZURSREYoInN0dWR5IDFjIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgMgojIGQyX2JlZXRsZSA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJiZWV0bGUiKQojIGQyX3JvYm90IDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgInJvYm90IikKZDJfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgMwojIGQzX2JlZXRsZSA8LSBtYWtlRFJERigic3R1ZHkgMyIsICJiZWV0bGUiKQojIGQzX3JvYm90IDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgInJvYm90IikKZDNfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgNApkNF9hbGwgPC0gbWFrZURSREYoInN0dWR5IDQiLCAiYWxsIikKYGBgCgpgYGB7ciBkYXRhZnJhbWUgZm9yIHNsaWRpbmcgd2luZG93LCBpbmNsdWRlID0gRn0KIyBtZXJnZSBkYXRhc2V0cyBmcm9tIHN0dWRpZXMgMy00IGFuZCBydW4gMDQKZF9zbGlkZSA8LSBkMyAlPiUKICBzZWxlY3QoLXRyaWFsLmNvbW1lbnRzKSAlPiUKICBmdWxsX2pvaW4oZDQgJT4lIHNlbGVjdCgtdHJpYWwuY29tbWVudHMpKSAlPiUKICBmdWxsX2pvaW4oZDUgJT4lIHNlbGVjdCgtdHJpYWwuY29tbWVudHMpKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSByZWNvZGUoY2FwYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3J5ID0gImFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcyA9ICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zY2lvdXMgPSAiYXdhcmVuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVzc2VkID0gInNhZG5lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCA9ICJkZXB0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Jlc3BlY3RlZCA9ICJodXJ0IGZlZWxpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1iYXJyYXNzZWQgPSAiZW1iYXJyYXNzbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXIgPSAiZmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWx0ID0gImd1aWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFwcHkgPSAiaGFwcGluZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVuZ3J5ID0gImh1bmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdmUgPSAibG92ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdXNlYXRlZCA9ICJuYXVzZWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZG9ycyA9ICJzbWVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW4gPSAicGFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWRlID0gInByaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uaW5nID0gImZpZ3VyaW5nIG91dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWVtYmVyaW5nID0gIm1lbW9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlID0gInRlbXBlcmF0dXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlyZWQgPSAiZmF0aWd1ZSIpKQoKIyBnZXQgYWdlIHJhbmtzCmRfc2xpZGVfc3ViaWQgPC0gZF9zbGlkZSAlPiUKICBkaXN0aW5jdChzdWJpZCwgYWdlKSAlPiUKICBhcnJhbmdlKGFnZSwgc3ViaWQpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiYWdlX3JhbmsiKSAlPiUKICBtdXRhdGUoYWdlX3JhbmsgPSBhcy5udW1lcmljKGFnZV9yYW5rKSkKCmRfc2xpZGUgPC0gZF9zbGlkZSAlPiUKICBmaWx0ZXIoc3ViaWQgJWluJSBkX3NsaWRlX3N1YmlkJHN1YmlkKSAlPiUKICBsZWZ0X2pvaW4oZF9zbGlkZV9zdWJpZCkgJT4lCiAgYXJyYW5nZShhZ2VfcmFuaywgdHJpYWxOdW0pICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkKCiMgbWFrZSB3aWRlZnJhbWUgZGYKZF9zbGlkZV9hbGwgPC0gZF9zbGlkZSAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZSwgY2hhcmFjdGVyLCBjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogIG11dGF0ZShhZ2UgPSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihhZ2UpKSkgJT4lCiAgc3ByZWFkKGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgYXJyYW5nZShhZ2UpICU+JQogIHJlbW92ZV9yb3duYW1lcygpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKQoKIyBsaW1pdCB0byBjb21wbGV0ZSBjYXNlcyBmb3IgdHNuZQpkX3NsaWRlX2FsbF9jb21wbGV0ZSA8LSBkX3NsaWRlX2FsbFtjb21wbGV0ZS5jYXNlcyhkX3NsaWRlX2FsbCksXQpgYGAKCiMgdC1TTkU6IG9uIGNhcGFjaXRpZXMKCiMjIFBOQVMgU3R1ZGllcyAoYWR1bHRzKQoKIyMjIFBOQVMgU3R1ZHkgMQoKYGBge3J9CnBuYXNfY29sb3JzX2QxIDwtIGZhKHBuYXNfZDFfYWxsLCBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJ2YXJpbWF4IikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CnBuYXNfZDFfYWxsX3QgPC0gcG5hc19kMV9hbGwgJT4lIHQoKQpwbmFzX2QxX3RzbmUgPC0gUnRzbmUocG5hc19kMV9hbGxfdCwKICAgICAgICAgICAgICAgICAgICAgIGRpbXMgPSAyLAogICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gNDAsCiAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gNiwKICAgICAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gMTAwMDAsCiAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCgpwbmFzX2QxX3RzbmVfZGYgPC0gcG5hc19kMV90c25lJFkgJT4lIGRhdGEuZnJhbWUoKQoKcm93bmFtZXMocG5hc19kMV90c25lX2RmKSA8LSBuYW1lcyhwbmFzX2QxX2FsbCkKICAKcG5hc19kMV90c25lX2RmIDwtIHBuYXNfZDFfdHNuZV9kZiAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKGRpbTEgPSBYMSwgZGltMiA9IFgyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gNX0KZ2dwbG90KHBuYXNfZDFfdHNuZV9kZiAlPiUgZnVsbF9qb2luKHBuYXNfY29sb3JzX2QxKSwKICAgICAgIGFlcyh4ID0gZGltMSwgCiAgICAgICAgICAgeSA9IGRpbTIsIAogICAgICAgICAgIGNvbG9yID0gZmFjdG9yLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNiwgc2l6ZSA9IDQpICsKICBnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoImZhY3RvciAoYWNjb3JkaW5nIHRvIEVGQSk6ICIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoIk1SMSIsICJNUjIiLCAiTVIzIiksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgNTApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgNTApKSArCiAgbGFicyh4ID0gInQtU05FIGRpbWVuc2lvbiAxIiwgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGNvb3JkX2ZpeGVkKCkKYGBgCgojIyMgUE5BUyBTdHVkeSAyCgpgYGB7cn0KcG5hc19jb2xvcnNfZDIgPC0gZmEocG5hc19kMl9hbGwsIG5mYWN0b3JzID0gMywgcm90YXRlID0gInZhcmltYXgiKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KcG5hc19kMl9hbGxfdCA8LSBwbmFzX2QyX2FsbCAlPiUgdCgpCnBuYXNfZDJfdHNuZSA8LSBSdHNuZShwbmFzX2QyX2FsbF90LAogICAgICAgICAgICAgICAgICAgICAgZGltcyA9IDIsCiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSA0MCwKICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSAxMiwKICAgICAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gMTAwMDAsCiAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCgpwbmFzX2QyX3RzbmVfZGYgPC0gcG5hc19kMl90c25lJFkgJT4lIGRhdGEuZnJhbWUoKQoKcm93bmFtZXMocG5hc19kMl90c25lX2RmKSA8LSBuYW1lcyhwbmFzX2QyX2FsbCkKICAKcG5hc19kMl90c25lX2RmIDwtIHBuYXNfZDJfdHNuZV9kZiAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKGRpbTEgPSBYMSwgZGltMiA9IFgyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gNX0KZ2dwbG90KHBuYXNfZDJfdHNuZV9kZiAlPiUgZnVsbF9qb2luKHBuYXNfY29sb3JzX2QyKSwKICAgICAgIGFlcyh5ID0gZGltMSwgCiAgICAgICAgICAgeCA9IGRpbTIsIAogICAgICAgICAgIGNvbG9yID0gZmFjdG9yLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNiwgc2l6ZSA9IDQpICsKICBnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoImZhY3RvciAoYWNjb3JkaW5nIHRvIEVGQSk6ICIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoIk1SMSIsICJNUjIiLCAiTVIzIiksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCA1KSkgKwogIGxhYnMoeSA9ICJ0LVNORSBkaW1lbnNpb24gMSIsIHggPSAidC1TTkUgZGltZW5zaW9uIDIiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBjb29yZF9maXhlZCgpCmBgYAoKIyMjIFBOQVMgU3R1ZHkgMwoKYGBge3J9CnBuYXNfY29sb3JzX2QzIDwtIGZhKHBuYXNfZDNfYWxsLCBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJ2YXJpbWF4IikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CnBuYXNfZDNfYWxsX3QgPC0gcG5hc19kM19hbGwgJT4lIHQoKQpwbmFzX2QzX3RzbmUgPC0gUnRzbmUocG5hc19kM19hbGxfdCwKICAgICAgICAgICAgICAgICAgICAgIGRpbXMgPSAyLAogICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gNDAsCiAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gOSwKICAgICAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gMTAwMDAsCiAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCgpwbmFzX2QzX3RzbmVfZGYgPC0gcG5hc19kM190c25lJFkgJT4lIGRhdGEuZnJhbWUoKQoKcm93bmFtZXMocG5hc19kM190c25lX2RmKSA8LSBuYW1lcyhwbmFzX2QzX2FsbCkKICAKcG5hc19kM190c25lX2RmIDwtIHBuYXNfZDNfdHNuZV9kZiAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKGRpbTEgPSBYMSwgZGltMiA9IFgyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gNX0KZ2dwbG90KHBuYXNfZDNfdHNuZV9kZiAlPiUgZnVsbF9qb2luKHBuYXNfY29sb3JzX2QzKSwKICAgICAgIGFlcyh5ID0gZGltMSwgCiAgICAgICAgICAgeCA9IGRpbTIsIAogICAgICAgICAgIGNvbG9yID0gZmFjdG9yLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNiwgc2l6ZSA9IDQpICsKICBnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoImZhY3RvciAoYWNjb3JkaW5nIHRvIEVGQSk6ICIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoIk1SMyIsICJNUjEiLCAiTVIyIiksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgNTApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgNTApKSArCiAgbGFicyh5ID0gInQtU05FIGRpbWVuc2lvbiAxIiwgeCA9ICJ0LVNORSBkaW1lbnNpb24gMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGNvb3JkX2ZpeGVkKCkKYGBgCgojIyMgUE5BUyBTdHVkeSA0CgpgYGB7cn0KcG5hc19jb2xvcnNfZDQgPC0gZmEocG5hc19kNF9hbGwsIG5mYWN0b3JzID0gMywgcm90YXRlID0gInZhcmltYXgiKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KcG5hc19kNF9hbGxfdCA8LSBwbmFzX2Q0X2FsbCAlPiUgdCgpCnBuYXNfZDRfdHNuZSA8LSBSdHNuZShwbmFzX2Q0X2FsbF90LAogICAgICAgICAgICAgICAgICAgICAgZGltcyA9IDIsCiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSA0MCwKICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSA5LAogICAgICAgICAgICAgICAgICAgICAgbWF4X2l0ZXIgPSAxMDAwMCwKICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSkKCnBuYXNfZDRfdHNuZV9kZiA8LSBwbmFzX2Q0X3RzbmUkWSAlPiUgZGF0YS5mcmFtZSgpCgpyb3duYW1lcyhwbmFzX2Q0X3RzbmVfZGYpIDwtIG5hbWVzKHBuYXNfZDRfYWxsKQogIApwbmFzX2Q0X3RzbmVfZGYgPC0gcG5hc19kNF90c25lX2RmICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUoZGltMSA9IFgxLCBkaW0yID0gWDIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5oZWlnaHQgPSA1fQpnZ3Bsb3QocG5hc19kNF90c25lX2RmICU+JSBmdWxsX2pvaW4ocG5hc19jb2xvcnNfZDQpLAogICAgICAgYWVzKHkgPSBkaW0xLCAKICAgICAgICAgICB4ID0gZGltMiwgCiAgICAgICAgICAgY29sb3IgPSBmYWN0b3IsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC42LCBzaXplID0gNCkgKwogIGdlb21fdGV4dF9yZXBlbChzaXplID0gNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgiZmFjdG9yIChhY2NvcmRpbmcgdG8gRUZBKTogIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygiTVIxIiwgIk1SMiIsICJNUjMiKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIiksCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNlNDFhMWMiLCAiIzM3N2ViOCIsICIjNGRhZjRhIikpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMCkpICsKICBsYWJzKHkgPSAidC1TTkUgZGltZW5zaW9uIDEiLCB4ID0gInQtU05FIGRpbWVuc2lvbiAyIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgY29vcmRfZml4ZWQoKQpgYGAKCgojIyBEaW1raWQgU3R1ZGllcyAoY2hpbGRyZW4pCgojIyBEaW1raWQgU3R1ZHkgMyAoNy05eSkKCmBgYHtyfQpjb2xvcnNfZDMgPC0gZmEoZDNfYWxsLCBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmQzX2FsbF90IDwtIGQzX2FsbCAlPiUgdCgpCmQzX3RzbmUgPC0gUnRzbmUoZDNfYWxsX3QsCiAgICAgICAgICAgICAgICAgICAgICBkaW1zID0gMiwKICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfZGltcyA9IDIwLAogICAgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eSA9IDUsCiAgICAgICAgICAgICAgICAgICAgICBtYXhfaXRlciA9IDEwMDAwLAogICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKQoKZDNfdHNuZV9kZiA8LSBkM190c25lJFkgJT4lIGRhdGEuZnJhbWUoKQoKcm93bmFtZXMoZDNfdHNuZV9kZikgPC0gbmFtZXMoZDNfYWxsKQogIApkM190c25lX2RmIDwtIGQzX3RzbmVfZGYgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShkaW0xID0gWDEsIGRpbTIgPSBYMikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmhlaWdodCA9IDV9CmdncGxvdChkM190c25lX2RmICU+JSBmdWxsX2pvaW4oY29sb3JzX2QzKSwKICAgICAgIGFlcyh4ID0gZGltMSwgCiAgICAgICAgICAgeSA9IGRpbTIsIAogICAgICAgICAgIGNvbG9yID0gZmFjdG9yLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNiwgc2l6ZSA9IDQpICsKICBnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoImZhY3RvciAoYWNjb3JkaW5nIHRvIEVGQSk6ICIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoIk1SMSIsICJNUjMiLCAiTVIyIiksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgMTAwKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMDAsIDEwMDAsIDEwMCkpICsKICBsYWJzKHggPSAidC1TTkUgZGltZW5zaW9uIDEiLCB5ID0gInQtU05FIGRpbWVuc2lvbiAyIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgY29vcmRfZml4ZWQoKQpgYGAKCiMjIERpbWtpZCBTdHVkeSA0ICg0LTZ5KQoKYGBge3J9CmNvbG9yc19kNCA8LSBmYShkNF9hbGwsIG5mYWN0b3JzID0gMiwgcm90YXRlID0gIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZDRfYWxsX3QgPC0gZDRfYWxsW2NvbXBsZXRlLmNhc2VzKGQ0X2FsbCksXSAlPiUgdCgpCmQ0X3RzbmUgPC0gUnRzbmUoZDRfYWxsX3QsCiAgICAgICAgICAgICAgICAgZGltcyA9IDIsCiAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gMjAsCiAgICAgICAgICAgICAgICAgcGVycGxleGl0eSA9IDUsCiAgICAgICAgICAgICAgICAgbWF4X2l0ZXIgPSAxMDAwMCwKICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCgpkNF90c25lX2RmIDwtIGQ0X3RzbmUkWSAlPiUgZGF0YS5mcmFtZSgpCgpyb3duYW1lcyhkNF90c25lX2RmKSA8LSBuYW1lcyhkNF9hbGwpCiAgCmQ0X3RzbmVfZGYgPC0gZDRfdHNuZV9kZiAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKGRpbTEgPSBYMSwgZGltMiA9IFgyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gNX0KZ2dwbG90KGQ0X3RzbmVfZGYgJT4lIGZ1bGxfam9pbihjb2xvcnNfZDMpLAogICAgICAgYWVzKHggPSBkaW0xLCAKICAgICAgICAgICB5ID0gZGltMiwgCiAgICAgICAgICAgY29sb3IgPSBmYWN0b3IsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC42LCBzaXplID0gNSkgKwogIGdlb21fdGV4dF9yZXBlbChzaXplID0gNikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgiZmFjdG9yIChhY2NvcmRpbmcgdG8gNy05eW8gRUZBKTogIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygiTVIxIiwgIk1SMyIsICJNUjIiKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIiksCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNlNDFhMWMiLCAiIzM3N2ViOCIsICIjNGRhZjRhIikpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMCkpICsKICBsYWJzKHggPSAidC1TTkUgZGltZW5zaW9uIDEiLCB5ID0gInQtU05FIGRpbWVuc2lvbiAyIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgY29vcmRfZml4ZWQoKQpgYGAKCiMjIERpbWtpZCBTdHVkaWVzIDMtNCAoNC05eSkKCiMjIyBBbGwgdG9nZXRoZXIKCmBgYHtyfQpjb2xvcnNfZHNsaWRlIDwtIGZhKGRfc2xpZGVfYWxsX2NvbXBsZXRlICU+JSBzZWxlY3QoYW5nZXI6dGVtcGVyYXR1cmUpLCAKICAgICAgICAgICAgICAgICAgICBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc2xpZGVfYWxsX2NvbXBsZXRlX3QgPC0gZF9zbGlkZV9hbGxfY29tcGxldGVbY29tcGxldGUuY2FzZXMoZF9zbGlkZV9hbGxfY29tcGxldGUpLC1jKDE6MildICU+JSB0KCkKCmRfc2xpZGVfdHNuZSA8LSBSdHNuZShkX3NsaWRlX2FsbF9jb21wbGV0ZV90LAogICAgICAgICAgICAgICAgIGRpbXMgPSAyLAogICAgICAgICAgICAgICAgIGluaXRpYWxfZGltcyA9IDIwLAogICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSA1LAogICAgICAgICAgICAgICAgIG1heF9pdGVyID0gMTAwMDAsCiAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKQoKZF9zbGlkZV90c25lX2RmIDwtIGRfc2xpZGVfdHNuZSRZICU+JSBkYXRhLmZyYW1lKCkKCnJvd25hbWVzKGRfc2xpZGVfdHNuZV9kZikgPC0gbmFtZXMoZF9zbGlkZV9hbGxfY29tcGxldGVbLWMoMToyKV0pCiAgCmRfc2xpZGVfdHNuZV9kZiA8LSBkX3NsaWRlX3RzbmVfZGYgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShkaW0xID0gWDEsIGRpbTIgPSBYMikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmhlaWdodCA9IDV9CmdncGxvdChkX3NsaWRlX3RzbmVfZGYgJT4lIGZ1bGxfam9pbihjb2xvcnNfZHNsaWRlKSwKICAgICAgIGFlcyh4ID0gZGltMSwgCiAgICAgICAgICAgeSA9IGRpbTIsIAogICAgICAgICAgIGNvbG9yID0gZmFjdG9yLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNiwgc2l6ZSA9IDUpICsKICBnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoImZhY3RvciAoYWNjb3JkaW5nIHRvIDctOXlvIEVGQSk6ICIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoIk1SMyIsICJNUjEiLCAiTVIyIiksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMDAsIDEwMDAwLCAyMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMDAsIDEwMDAwLCAyMDApKSArCiAgbGFicyh4ID0gInQtU05FIGRpbWVuc2lvbiAxIiwgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGNvb3JkX2ZpeGVkKCkKYGBgCgojIyMgU2xpZGluZyB3aW5kb3cKCmBgYHtyfQojIG1ha2UgdHNuZSBmdW5jdGlvbgp0c25lX2Z1biA8LSBmdW5jdGlvbihkZiwgaW5pdGlhbF9kaW1zX3NldCA9IDIwLCBwZXJwbGV4aXR5X3NldCA9IDUpewogIGRmX3QgPC0gZGYgJT4lIHQoKQogIAogIGRmX3RzbmUgPC0gUnRzbmUoZGZfdCwKICAgICAgICAgICAgICAgICAgIGRpbXMgPSAyLAogICAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gaW5pdGlhbF9kaW1zX3NldCwKICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSBwZXJwbGV4aXR5X3NldCwKICAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gMTAwMDAsCiAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCgogIGRmX3RzbmVfZGYgPC0gZGZfdHNuZSRZICU+JSBkYXRhLmZyYW1lKCkKICAKICByb3duYW1lcyhkZl90c25lX2RmKSA8LSBuYW1lcyhkZikKICAgIAogIGRmX3RzbmVfZGYgPC0gZGZfdHNuZV9kZiAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICAgIHJlbmFtZShkaW0xID0gWDEsIGRpbTIgPSBYMikKICAKICByZXR1cm4oZGZfdHNuZV9kZikKfQpgYGAKCmBgYHtyLCBtZXNzYWdlID0gRkFMU0V9CiMgZG8gc2xpZGluZyB3aW5kb3csIGdyb3VwaW5nIGJ5IGNoYXJhY3Rlcgp3aW5kb3dfc2l6ZSA8LSAxMjAKCmNoYXJfbWVhbnMgPC0gZGF0YS5mcmFtZShjYXBhY2l0eSA9IGNoYXJhY3RlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmVldGxlID0gbnVtZXJpYygpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmlyZCA9IG51bWVyaWMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVyID0gbnVtZXJpYygpLAogICAgICAgICAgICAgICAgICAgICAgICAgZG9sbCA9IG51bWVyaWMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGVsZXBoYW50ID0gbnVtZXJpYygpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ29hdCA9IG51bWVyaWMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlID0gbnVtZXJpYygpLAogICAgICAgICAgICAgICAgICAgICAgICAgcm9ib3QgPSBudW1lcmljKCksCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZWRkeV9iZWFyID0gbnVtZXJpYygpLAogICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93ID0gbnVtZXJpYygpLAogICAgICAgICAgICAgICAgICAgICAgICAgYWdlX21pbiA9IG51bWVyaWMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9tYXggPSBudW1lcmljKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfbWVkID0gbnVtZXJpYygpKQogICAgICAgICAgICAgICAgICAgICAgICAgCiMgZ2V0IGNoYXJhY3RlciBtZWFucyBmb3IgZWFjaCB3aW5kb3cKZm9yKGkgaW4gMToobnJvdyhkX3NsaWRlX2FsbF9jb21wbGV0ZSktd2luZG93X3NpemUpKXsKICBkZl90ZW1wMSA8LSBkX3NsaWRlX2FsbF9jb21wbGV0ZSAlPiUgYXJyYW5nZShhZ2UsIGNoYXJhY3RlcikKICAKICBkZl90ZW1wMiA8LSBkZl90ZW1wMVtpOihpK3dpbmRvd19zaXplLTEpLF0KCiAgZGZfdGVtcDMgPC0gZGZfdGVtcDIgJT4lCiAgICBzZWxlY3QoLWFnZSkgJT4lCiAgICBnYXRoZXIoY2FwYWNpdHksIHJlc3BvbnNlLCAtY2hhcmFjdGVyKSAlPiUKICAgIGdyb3VwX2J5KGNoYXJhY3RlciwgY2FwYWNpdHkpICU+JQogICAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIHNwcmVhZChjaGFyYWN0ZXIsIG1lYW4pICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgbXV0YXRlKHdpbmRvdyA9IGksCiAgICAgICAgICAgYWdlX21pbiA9IG1pbihkZl90ZW1wMiRhZ2UpLAogICAgICAgICAgIGFnZV9tYXggPSBtYXgoZGZfdGVtcDIkYWdlKSwKICAgICAgICAgICBhZ2VfbWVkID0gbWVkaWFuKGRmX3RlbXAyJGFnZSkpCiAgCiAgY2hhcl9tZWFucyA8LSBmdWxsX2pvaW4oY2hhcl9tZWFucywgZGZfdGVtcDMpCn0KCmNoYXJfbWVhbnMgPC0gY2hhcl9tZWFucyAlPiUgCiAgbXV0YXRlKGNhcF93aW5kb3cgPSBwYXN0ZShjYXBhY2l0eSwgd2luZG93LCBzZXAgPSAiXyIpKQpgYGAKCmBgYHtyfQp0ZW1wIDwtIGRhdGEuZnJhbWUoZF9zbGlkZV9hbGxfY29tcGxldGUgJT4lIAogICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKGRlc2MoYWdlKSkpW2MoMTp3aW5kb3dfc2l6ZSksLWMoMToyKV0KCmNvbG9yc19kc2xpZGVfZmluYWwgPC0gZmEodGVtcCwgbmZhY3RvcnMgPSAzLCByb3RhdGUgPSAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGRvIHRzbmUgb24gY2hhcl9tZWFucwpjaGFyX21lYW5zX2RmIDwtIGNoYXJfbWVhbnMgJT4lCiAgc2VsZWN0KGNhcF93aW5kb3csIGJlZXRsZTp0ZWRkeV9iZWFyKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBfd2luZG93IikgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyB0YWtlIEZPUkVWRVIgdG8gcnVuLi4uCiMgY2hhcl9tZWFuc190c25lNjUwIDwtIHRzbmVfZnVuKGNoYXJfbWVhbnNfZGYsIHBlcnBsZXhpdHlfc2V0ID0gNjUwKQojIGNoYXJfbWVhbnNfdHNuZTcyNSA8LSB0c25lX2Z1bihjaGFyX21lYW5zX2RmLCBwZXJwbGV4aXR5X3NldCA9IDcyNSkKIyBjaGFyX21lYW5zX3RzbmU4MDAgPC0gdHNuZV9mdW4oY2hhcl9tZWFuc19kZiwgcGVycGxleGl0eV9zZXQgPSA4MDApCgojIGNob29zZSB3aGljaCBwZXJwbGV4aXR5CiMgY2hhcl9tZWFuc190c25lIDwtIGNoYXJfbWVhbnNfdHNuZTY1MAojIGNoYXJfbWVhbnNfdHNuZSA8LSBjaGFyX21lYW5zX3RzbmU3MjUKY2hhcl9tZWFuc190c25lIDwtIGNoYXJfbWVhbnNfdHNuZTgwMAoKY2hhcl9tZWFuc190c25lX2RmIDwtIGNoYXJfbWVhbnNfdHNuZSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBuYW1lcyhkYXRhLmZyYW1lKGNoYXJfbWVhbnNfZGYpKSkgJT4lCiAgbXV0YXRlKHdpbmRvdyA9IGdzdWIoIl4uK18iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIl8uKyQiLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICB3aW5kb3cgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih3aW5kb3cpKSkgJT4lCiAgZnVsbF9qb2luKGNoYXJfbWVhbnMgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KHdpbmRvdywgc3RhcnRzX3dpdGgoImFnZSIpKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUod2luZG93ID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIod2luZG93KSkpICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KCkpICU+JQogIGZ1bGxfam9pbihjb2xvcnNfZHNsaWRlX2ZpbmFsICU+JSB1bmdyb3VwKCkgJT4lIGRpc3RpbmN0KGNhcGFjaXR5LCBmYWN0b3IpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoY2hhcl9tZWFuc190c25lX2RmLAogICAgICAgYWVzKHggPSBkaW0xLAogICAgICAgICAgIHkgPSBkaW0yLAogICAgICAgICAgIGdyb3VwID0gY2FwYWNpdHksCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSwKICAgICAgICAgICBhbHBoYSA9IHdpbmRvdywKICAgICAgICAgICBjb2xvciA9IGZhY3RvcikpICsKICBnZW9tX3BhdGgoc2l6ZSA9IDEpICsKICAjIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gY2hhcl9tZWFuc190c25lX2RmICU+JQogICAgICAgICAgICAgICAgICAgIGZpbHRlcih3aW5kb3cgPT0gbWF4KHdpbmRvdykpICU+JQogICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0KCksCiAgICAgICAgICAgICAgICAgIGFscGhhID0gMSwgc2VnbWVudC5zaXplID0gMCkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCmBgYHtyfQpnIDwtIGdncGxvdChjaGFyX21lYW5zX3RzbmVfZGYgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKGFnZV9yYW5nZSA9IHBhc3RlMChyb3VuZDIoYWdlX21pbiksICItIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZDIoYWdlX21heCksICIgeWVhcnMiKSksCiAgICAgICBhZXMoeCA9IGRpbTEsCiAgICAgICAgICAgeSA9IGRpbTIsCiAgICAgICAgICAgZ3JvdXAgPSBjYXBhY2l0eSwKICAgICAgICAgICBsYWJlbCA9IGdzdWIoIlxcLiIsICIgIiwgY2FwYWNpdHkpLAogICAgICAgICAgICMgYWxwaGEgPSB3aW5kb3csCiAgICAgICAgICAgIyBmcmFtZSA9IHdpbmRvdywKICAgICAgICAgICBmcmFtZSA9IGFnZV9yYW5nZSwKICAgICAgICAgICBjb2xvciA9IGZhY3RvcikpICsKICAjIGdlb21fcGF0aChzaXplID0gMSkgKwogICMgZ2VvbV9wb2ludCgpICsKICAjIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IGNoYXJfbWVhbnNfdHNuZV9kZiAlPiUKICAjICAgICAgICAgICAgICAgICAgIGZpbHRlcih3aW5kb3cgPT0gbWF4KHdpbmRvdykpICU+JQogICMgICAgICAgICAgICAgICAgICAgZGlzdGluY3QoKSwKICAjICAgICAgICAgICAgICAgICBhbHBoYSA9IDEsIHNlZ21lbnQuc2l6ZSA9IDApICsKICBnZW9tX3RleHQoc2l6ZSA9IDkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoImZhY3RvciAoYWNjb3JkaW5nIHRvIEVGQSBpbiBvbGRlc3Qgd2luZG93KTogIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygiTVIxIiwgIk1SMyIsICJNUjIiKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIiksCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNlNDFhMWMiLCAiIzM3N2ViOCIsICIjNGRhZjRhIikpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwMCwgMTAwMDAsIDUpLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKC4yLCAuMikpICsgIyBwYWRkaW5nIGZvciB0ZXh0CiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMDAsIDEwMDAwLCA1KSkgKwogIGxhYnMoeCA9ICJ0LVNORSBkaW1lbnNpb24gMSIsIAogICAgICAgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIsCiAgICAgICB0aXRsZSA9ICJBZ2UgcmFuZ2U6IikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpKSArCiAgY29vcmRfZml4ZWQoKQoKIyBnCmBgYAoKYGBge3J9CmdnYW5pbWF0ZTo6Z2dhbmltYXRlKGcsICJ0c25lX2FuaW1hdGlvbi5naWYiLCAKICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAwLjEsIAogICAgICAgICAgICAgICAgICAgICBhbmkud2lkdGggPSAxMjAwLCBhbmkuaGVpZ2h0ID0gNzAwKQpgYGAKCgoKIyBPbGQgc2NyYXBzCgpOZWVkIHRvIHJldmlldyBhbmQgZGVsZXRlLi4uCgojIyAyIGRpbWVuc2lvbnMKCmBgYHtyIHRzbmUyRCBtY30KIyAjIDQtMTB5IG9uIDIwIHF1ZXN0aW9uIHZlcnNpb24KIyBkX3NsaWRlX2FsbF9jb21wbGV0ZV90IDwtIGRfc2xpZGVfYWxsX2NvbXBsZXRlICU+JQojICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVkZHlfYmVhciIsICJiZWV0bGUiLCAiYmlyZCIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpICU+JQojICAgYXJyYW5nZShjaGFyYWN0ZXIsIGFnZSkgJT4lCiMgICBzZWxlY3QoLWNoYXJhY3RlciwgLWFnZSkgJT4lCiMgICB0KCkKIyAKIyB0c25lMkRfbWNfZHNsaWRlIDwtIFJ0c25lKGRfc2xpZGVfYWxsX2NvbXBsZXRlX3QsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcyA9IDIsIAojICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gMjAsCiMgICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gNSwKIyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gMTAwMDAsCiMgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCiMgCiMgdHNuZTJEX21jX2RmIDwtIHRzbmUyRF9tY19kc2xpZGUkWSAlPiUKIyAgIGRhdGEuZnJhbWUoKQojIAojIHJvd25hbWVzKHRzbmUyRF9tY19kZikgPC0gbmFtZXMoZF9zbGlkZV9hbGxfY29tcGxldGUpWy1jKDEsMildCiMgICAKIyB0c25lMkRfbWNfZGYgPC0gdHNuZTJEX21jX2RmICU+JQojICAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQojICAgcmVuYW1lKHRzbmUyRF9tY19kaW0xID0gWDEsIHRzbmUyRF9tY19kaW0yID0gWDIpCmBgYAoKYGBge3IgdHNuZTJEX21jIHNjYXR0ZXJwbG90LCBmaWcud2lkdGggPSAyLjUsIGZpZy5oZWlnaHQgPSA0fQojIGdncGxvdCh0c25lMkRfbWNfZGYsCiMgICAgICAgIGFlcyh4ID0gdHNuZTJEX21jX2RpbTEsIHkgPSB0c25lMkRfbWNfZGltMiwgCiMgICAgICAgICAgICAjIGNvbG9yID0gY2FwYWNpdHksIAojICAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKIyAgICMgZ2VvbV9wb2ludChhbHBoYSA9IDAuNiwgc2l6ZSA9IDYpICsgCiMgICBnZW9tX2xhYmVsKHNpemUgPSA0KSArCiMgICAjIHNjYWxlX2NvbG9yX2JyZXdlcigiY2FwYWNpdHkiLCB0eXBlID0gImRpdiIpICsKIyAgIHhsaW0obWluKHRzbmUyRF9tY19kZiRYMSkgLSAwLjIgKiBzZCh0c25lMkRfbWNfZGYkWDEpLAojICAgICAgICBtYXgodHNuZTJEX21jX2RmJFgxKSArIDAuMiAqIHNkKHRzbmUyRF9tY19kZiRYMSkpICsKIyAgIHlsaW0obWluKHRzbmUyRF9tY19kZiRYMikgLSAwLjIgKiBzZCh0c25lMkRfbWNfZGYkWDIpLAojICAgICAgICBtYXgodHNuZTJEX21jX2RmJFgyKSArIDAuMiAqIHNkKHRzbmUyRF9tY19kZiRYMikpICsKIyAgIGxhYnMoeCA9ICJ0LVNORSBkaW1lbnNpb24gMSIsIHkgPSAidC1TTkUgZGltZW5zaW9uIDIiKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAojICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIDIgZGltZW5zaW9ucyBzbGlkaW5nIHdpbmRvdwoKYGBge3J9CiMgZWZhX2NvbG9ycyA8LSBmYShkX3NsaWRlX2FsbF9jb21wbGV0ZVstYygxLDIpXSwgCiMgICAgICAgICAgICAgICAgICBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKIyAgIGZhLnNvcnQoKSAlPiUKIyAgIGRhdGEuZnJhbWUoKSAlPiUKIyAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKIyAgIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiMgICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiMgICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JQojICAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk1SMSIsICJNUjIiLCAiTVIzIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkhFQVJUIiwgIk1JTkQiLCAiQk9EWSIpKSkKYGBgCgpgYGB7cn0KIyAjIG1ha2UgdHNuZSBmdW5jdGlvbgojIHRzbmVfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuID0gMTIwLAojICAgICAgICAgICAgICAgICAgICAgIGRpbXNfc2V0ID0gMiwgaW5pdGlhbF9kaW1zX3NldCA9IDUwLCAKIyAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IDUsIG1heF9pdGVyX3NldCA9IDEwMDAsCiMgICAgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gMC41LAojICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXNfc2V0ID0gRkFMU0UpewojICAgCiMgICBkZl90ZW1wIDwtIGRmW2NvbXBsZXRlLmNhc2VzKGRmKSxdICU+JQojICAgICB0b3BfbigtbiwgYWdlKSAlPiUKIyAgICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVkZHlfYmVhciIsICJiZWV0bGUiLCAiYmlyZCIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpICU+JQojICAgYXJyYW5nZShjaGFyYWN0ZXIsIGFnZSkgJT4lCiMgICBzZWxlY3QoLWNoYXJhY3RlciwgLWVuZHNfd2l0aCgiYWdlIikpICU+JQojICAgdCgpCiMgICAKIyAgIHRzbmUyRCA8LSBSdHNuZShkZl90ZW1wLAojICAgICAgICAgICAgICAgICAgIGRpbXMgPSBkaW1zX3NldCwKIyAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSBpbml0aWFsX2RpbXNfc2V0LAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSBwZXJwbGV4aXR5X3NldCwKIyAgICAgICAgICAgICAgICAgICB0aGV0YSA9IHRoZXRhX3NldCwKIyAgICAgICAgICAgICAgICAgICBtYXhfaXRlciA9IG1heF9pdGVyX3NldCwKIyAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gY2hlY2tfZHVwbGljYXRlc19zZXQpCiMgICAKIyAgIHRzbmUyRF9kZiA8LSB0c25lMkQkWSAlPiUKIyAgICAgZGF0YS5mcmFtZSgpCiMgICAKIyAgIHJvd25hbWVzKHRzbmUyRF9kZikgPC0gbmFtZXMoZGYpWy1jKDEsMildCiMgICAKIyAgIHRzbmUyRF9kZiA8LSB0c25lMkRfZGYgJT4lCiMgICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKQojICAgCiMgICByZXR1cm4odHNuZTJEX2RmKQojIH0KYGBgCgoKYGBge3J9CiMgIyBzZXQgd2luZG93IHNpemUKIyB3aW5kb3dfc2l6ZSA8LSAxMjAKIyAKIyAjIGRvIHNsaWRpbmcgd2luZG93CiMgYWxsX3RzbmUgPC0gbGlzdChOVUxMKQojIGZvcihpIGluIDE6KGxlbmd0aChkX3NsaWRlX2FsbF9jb21wbGV0ZSRhZ2UpLXdpbmRvd19zaXplKSkgewojICAgdHNuZV90ZW1wIDwtIHRzbmVfZnVuKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGUsIG4gPSB3aW5kb3dfc2l6ZSkKIyAgIGFsbF90c25lW1tpXV0gPC0gdHNuZV90ZW1wCiMgfQojIAojIGFsbF90c25lX2RmIDwtIGRhdGEuZnJhbWUoKQojIAojICMgZ2V0IGludG8gb25lIGRmCiMgZm9yKGkgaW4gMTpsZW5ndGgoYWxsX3RzbmUpKXsKIyAgIHRzbmVfdGVtcCA8LSBhbGxfdHNuZVtbaV1dICU+JQojICAgICBkYXRhLmZyYW1lKCkgJT4lCiMgICAgIG11dGF0ZSh3aW5kb3cgPSBpKQojICAgCiMgICBhbGxfdHNuZV9kZiA8LSByYmluZChhbGxfdHNuZV9kZiwgdHNuZV90ZW1wKQojIH0KYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMTIsIGZpZy5oZWlnaHQgPSAxMn0KIyBnZ3Bsb3QoYWxsX3RzbmVfZGYsCiMgICAgICAgIGFlcyh4ID0gWDEsIHkgPSBYMiwgCiMgICAgICAgICAgICBjb2xvciA9IGNhcGFjaXR5LCBncm91cCA9IGNhcGFjaXR5KSkgKwojICAgICAgICAgICAgIyBhbHBoYSA9IHdpbmRvdykpICsKIyAgIGZhY2V0X3dyYXAofiB3aW5kb3csIHNjYWxlcyA9ICJmcmVlIikgKwojICAgIyBnZW9tX3BhdGgoKSArCiMgICBnZW9tX3BvaW50KCkgKwojICAgeGxpbShtaW4odHNuZTJEX21jX2RmJHRzbmUyRF9tY19kaW0xKSAtIDAuMiAqIHNkKHRzbmUyRF9tY19kZiR0c25lMkRfbWNfZGltMSksCiMgICAgICAgIG1heCh0c25lMkRfbWNfZGYkdHNuZTJEX21jX2RpbTEpICsgMC4yICogc2QodHNuZTJEX21jX2RmJHRzbmUyRF9tY19kaW0xKSkgKwojICAgeWxpbShtaW4odHNuZTJEX21jX2RmJHRzbmUyRF9tY19kaW0yKSAtIDAuMiAqIHNkKHRzbmUyRF9tY19kZiR0c25lMkRfbWNfZGltMiksCiMgICAgICAgIG1heCh0c25lMkRfbWNfZGYkdHNuZTJEX21jX2RpbTIpICsgMC4yICogc2QodHNuZTJEX21jX2RmJHRzbmUyRF9tY19kaW0yKSkgKwojICAgbGFicyh4ID0gInQtU05FIGRpbWVuc2lvbiAxIiwgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIpICsKIyAgIHRoZW1lX2J3KCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAojICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiMgICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKYGBge3J9CiMgIyBtYWtlIHF1YW50aWxlcwojIGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlIDwtIGRfc2xpZGVfYWxsX2NvbXBsZXRlICU+JQojICAgbXV0YXRlKGJpbiA9IG50aWxlKGFnZSwgNSkpICU+JQojICAgZ3JvdXBfYnkoYmluKSAlPiUKIyAgIG11dGF0ZShtaW5fYWdlID0gbWluKGFnZSksCiMgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UpLAojICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2UsIG5hLnJtID0gVCksCiMgICAgICAgICAgbWVkX2FnZSA9IG1lZGlhbihhZ2UpKSAlPiUKIyAgIHVuZ3JvdXAoKQojIAojICMgc2V0IHBlcnBsZXhpdHkKIyBwZXJwIDwtIDYKIyBuX2l0ZXIgPC0gMTAwMDAKIyB0aGV0YSA8LSAwCiMgCiMgIyA0IGFnZSBncm91cHMKIyB0c25lMSA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKIyAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMSkgJT4lCiMgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKIyAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKIyAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyB0c25lMiA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKIyAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMikgJT4lCiMgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKIyAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKIyAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyB0c25lMyA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAzKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIHRzbmU0IDwtIHRzbmVfZnVuKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSA0KSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIHRzbmU1IDwtIHRzbmVfZnVuKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSA1KSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIAojIHF1YW50aWxlX2FsbCA8LSB0c25lMSAlPiUgbXV0YXRlKGJpbiA9IDEpICU+JQojICAgZnVsbF9qb2luKHRzbmUyICU+JSBtdXRhdGUoYmluID0gMikpICU+JQojICAgZnVsbF9qb2luKHRzbmUzICU+JSBtdXRhdGUoYmluID0gMykpICU+JQojICAgZnVsbF9qb2luKHRzbmU0ICU+JSBtdXRhdGUoYmluID0gNCkpICU+JQojICAgZnVsbF9qb2luKHRzbmU1ICU+JSBtdXRhdGUoYmluID0gNSkpICU+JQojICAgZnVsbF9qb2luKGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQojICAgICAgICAgICAgICAgc2VsZWN0KGJpbiwgZW5kc193aXRoKCJfYWdlIikpICU+JQojICAgICAgICAgICAgICAgZGlzdGluY3QoKSkgJT4lCiMgICBtdXRhdGUoYmluX2xhYmVsID0gcGFzdGUwKHJvdW5kKG1pbl9hZ2UsIDIpLCAiLSIsIHJvdW5kKG1heF9hZ2UsIDIpLCAieSIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuaGVpZ2h0ID0gM30KIyBnZ3Bsb3QocXVhbnRpbGVfYWxsICU+JQojICAgICAgICAgIGZ1bGxfam9pbihlZmFfY29sb3JzICU+JSBzZWxlY3QoY2FwYWNpdHksIGZhY3RvcikpLAojICAgICAgICAgICAgIGFlcyh4ID0gWDEsIHkgPSBYMiwgbGFiZWwgPSBjYXBhY2l0eSwgY29sb3IgPSBmYWN0b3IpKSArCiMgICAjIGZhY2V0X3dyYXAofiBiaW5fbGFiZWwsIHNjYWxlcyA9ICJmcmVlIikgKyAjLCBuY29sID0gNSkgKwojICAgZmFjZXRfZ3JpZCh+IGJpbl9sYWJlbCwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWVfeCIpICsgIywgbmNvbCA9IDUpICsKIyAgIGdlb21fcG9pbnQoKSArCiMgICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoKSArCiMgICB0aGVtZV9idygpICsKIyAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiI2U0MWExYyIpKSArCiMgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiMgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiMgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKIyAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICsKIyAgIGxhYnModGl0bGUgPSAidC1TTkUgYnkgYWdlIHF1aW50aWxlIChzZWUgZmFjZXQgbGFiZWxzIGZvciBhZ2UgcmFuZ2UpIiwKIyAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgicGVycGxleGl0eTogIiwgcGVycCwgIjsgaXRlcmF0aW9uczogIiwgbl9pdGVyLCAiXG4obm90ZTogc2NhbGVzIHZhcnkgYnkgcXVpbnRpbGUpIiksCiMgICAgICAgeCA9ICJ0LVNORSBkaW1lbnNpb24gMSIsCiMgICAgICAgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIpCmBgYAoKYGBge3J9CiMgIyBtYWtlIHRzbmUgZnVuY3Rpb24gLSBjb2xsYXBzZSBieSBjaGFyYWN0ZXIKIyB0c25lX2Z1bl9ieWNoYXIgPC0gZnVuY3Rpb24oZGYsIG4gPSAxMjAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXNfc2V0ID0gMiwgaW5pdGlhbF9kaW1zX3NldCA9IDUwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IDUsIG1heF9pdGVyX3NldCA9IDEwMDAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IDAuNSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlc19zZXQgPSBGQUxTRSl7CiMgICAKIyAgIGRmX3RlbXAgPC0gZGZbY29tcGxldGUuY2FzZXMoZGYpLF0gJT4lCiMgICAgIHRvcF9uKC1uLCBhZ2UpICU+JQojICAgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZWRkeV9iZWFyIiwgImJlZXRsZSIsICJiaXJkIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkgJT4lCiMgICAgIHNlbGVjdCgtYWdlKSAlPiUKIyAgICAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiMgICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKIyAgICAgZ2F0aGVyKGNhcGFjaXR5LCByZXNwb25zZSwgLXN1YmlkLCAtY2hhcmFjdGVyKSAlPiUKIyAgICAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBjYXBhY2l0eSkgJT4lCiMgICAgIHN1bW1hcmlzZShtZWFuID0gbWVhbihyZXNwb25zZSkpICU+JQojICAgICBhcnJhbmdlKGNoYXJhY3RlciwgY2FwYWNpdHkpICU+JQojICAgICBzcHJlYWQoY2hhcmFjdGVyLCBtZWFuKSAlPiUKIyAgICAgZGF0YS5mcmFtZSgpICU+JQojICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKIyAgICAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpCiMgICAKIyAgICMgbmFtZXMoZGZfdGVtcCkgPC0gZGZfdGVtcFsxLF0gJT4lIHQoKSAlPiUgYygpCiMgICAjIGRmX3RlbXAgPC0gZGZfdGVtcFstMSxdCiMgCiMgICB0c25lMkQgPC0gUnRzbmUoZGZfdGVtcCwKIyAgICAgICAgICAgICAgICAgICBkaW1zID0gZGltc19zZXQsCiMgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gaW5pdGlhbF9kaW1zX3NldCwKIyAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gcGVycGxleGl0eV9zZXQsCiMgICAgICAgICAgICAgICAgICAgdGhldGEgPSB0aGV0YV9zZXQsCiMgICAgICAgICAgICAgICAgICAgbWF4X2l0ZXIgPSBtYXhfaXRlcl9zZXQsCiMgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IGNoZWNrX2R1cGxpY2F0ZXNfc2V0KQojICAgCiMgICB0c25lMkRfZGYgPC0gdHNuZTJEJFkgJT4lCiMgICAgIGRhdGEuZnJhbWUoKQojICAgCiMgICByb3duYW1lcyh0c25lMkRfZGYpIDwtIG5hbWVzKGRmKVstYygxLDIpXQojICAgCiMgICB0c25lMkRfZGYgPC0gdHNuZTJEX2RmICU+JQojICAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikKIyAgIAojICAgcmV0dXJuKHRzbmUyRF9kZikKIyB9CmBgYAoKYGBge3J9CiMgIyBtYWtlIHF1YW50aWxlcwojIGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlIDwtIGRfc2xpZGVfYWxsX2NvbXBsZXRlICU+JQojICAgbXV0YXRlKGJpbiA9IG50aWxlKGFnZSwgNSkpICU+JQojICAgZ3JvdXBfYnkoYmluKSAlPiUKIyAgIG11dGF0ZShtaW5fYWdlID0gbWluKGFnZSksCiMgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UpLAojICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2UsIG5hLnJtID0gVCksCiMgICAgICAgICAgbWVkX2FnZSA9IG1lZGlhbihhZ2UpKSAlPiUKIyAgIHVuZ3JvdXAoKQojIAojICMgc2V0IHBlcnBsZXhpdHkKIyBwZXJwIDwtIDIKIyBuX2l0ZXIgPC0gMTAwMDAKIyB0aGV0YSA8LSAwCiMgCiMgIyA0IGFnZSBncm91cHMKIyB0c25lMSA8LSB0c25lX2Z1bl9ieWNoYXIoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiMgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDEpICU+JQojICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiMgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiMgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCiMgdHNuZTIgPC0gdHNuZV9mdW5fYnljaGFyKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAyKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIHRzbmUzIDwtIHRzbmVfZnVuX2J5Y2hhcihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAzKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIHRzbmU0IDwtIHRzbmVfZnVuX2J5Y2hhcihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKIyAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gNCkgJT4lCiMgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKIyAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKIyAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyB0c25lNSA8LSB0c25lX2Z1bl9ieWNoYXIoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiMgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDUpICU+JQojICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiMgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiMgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCiMgCiMgcXVhbnRpbGVfYWxsIDwtIHRzbmUxICU+JSBtdXRhdGUoYmluID0gMSkgJT4lCiMgICBmdWxsX2pvaW4odHNuZTIgJT4lIG11dGF0ZShiaW4gPSAyKSkgJT4lCiMgICBmdWxsX2pvaW4odHNuZTMgJT4lIG11dGF0ZShiaW4gPSAzKSkgJT4lCiMgICBmdWxsX2pvaW4odHNuZTQgJT4lIG11dGF0ZShiaW4gPSA0KSkgJT4lCiMgICBmdWxsX2pvaW4odHNuZTUgJT4lIG11dGF0ZShiaW4gPSA1KSkgJT4lCiMgICBmdWxsX2pvaW4oZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lCiMgICAgICAgICAgICAgICBzZWxlY3QoYmluLCBlbmRzX3dpdGgoIl9hZ2UiKSkgJT4lCiMgICAgICAgICAgICAgICBkaXN0aW5jdCgpKSAlPiUKIyAgIG11dGF0ZShiaW5fbGFiZWwgPSBwYXN0ZTAocm91bmQobWluX2FnZSwgMiksICItIiwgcm91bmQobWF4X2FnZSwgMiksICJ5IikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5oZWlnaHQgPSAzfQojIGdncGxvdChxdWFudGlsZV9hbGwgJT4lCiMgICAgICAgICAgZnVsbF9qb2luKGVmYV9jb2xvcnMgJT4lIHNlbGVjdChjYXBhY2l0eSwgZmFjdG9yKSksCiMgICAgICAgICAgICAgYWVzKHggPSBYMSwgeSA9IFgyLCBsYWJlbCA9IGNhcGFjaXR5LCBjb2xvciA9IGZhY3RvcikpICsKIyAgICMgZmFjZXRfd3JhcCh+IGJpbl9sYWJlbCwgc2NhbGVzID0gImZyZWUiKSArICMsIG5jb2wgPSA1KSArCiMgICBmYWNldF9ncmlkKH4gYmluX2xhYmVsLCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZV94IikgKyAjLCBuY29sID0gNSkgKwojICAgZ2VvbV9wb2ludCgpICsKIyAgIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbCgpICsKIyAgIHRoZW1lX2J3KCkgKwojICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiIzRkYWY0YSIsICIjZTQxYTFjIikpICsKIyAgIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMDAsIDEwMDAsIDEwMCkpICsKIyAgIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMDAsIDEwMDAsIDEwMCkpICsKIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAojICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwojICAgbGFicyh0aXRsZSA9ICJ0LVNORSBieSBhZ2UgcXVpbnRpbGUgKHNlZSBmYWNldCBsYWJlbHMgZm9yIGFnZSByYW5nZSkiLAojICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJwZXJwbGV4aXR5OiAiLCBwZXJwLCAiOyBpdGVyYXRpb25zOiAiLCBuX2l0ZXIsICJcbihub3RlOiBzY2FsZXMgdmFyeSBieSBxdWludGlsZSkiKSwKIyAgICAgICB4ID0gInQtU05FIGRpbWVuc2lvbiAxIiwKIyAgICAgICB5ID0gInQtU05FIGRpbWVuc2lvbiAyIikKYGBgCgpgYGB7cn0KIyAjIG1ha2UgdHNuZSBmdW5jdGlvbiAtIGNvbGxhcHNlIGJ5IGNoYXJhY3RlcgojIHRzbmVfZnVuX2J5Y2hhcl9hZ2VzbGljZSA8LSBmdW5jdGlvbihkZiwgbiA9IDEyMCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltc19zZXQgPSAyLCBpbml0aWFsX2RpbXNfc2V0ID0gNTAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gNSwgbWF4X2l0ZXJfc2V0ID0gMTAwMCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gMC41LAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzX3NldCA9IEZBTFNFKXsKIyAgIAojICAgZGZfdGVtcCA8LSBkZltjb21wbGV0ZS5jYXNlcyhkZiksXSAlPiUKIyAgICAgdG9wX24oLW4sIGFnZSkgJT4lCiMgICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsICJkb2xsIiwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlZGR5X2JlYXIiLCAiYmVldGxlIiwgImJpcmQiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikpKSAlPiUKIyAgICAgbXV0YXRlKGFnZV9iaW4gPSBudGlsZShhZ2UsIDUpKSAlPiUKIyAgICAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiMgICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKIyAgICAgc2VsZWN0KC1hZ2UpICU+JQojICAgICBnYXRoZXIoY2FwYWNpdHksIHJlc3BvbnNlLCAtc3ViaWQsIC1jaGFyYWN0ZXIsIC1hZ2VfYmluKSAlPiUKIyAgICAgZ3JvdXBfYnkoYWdlX2JpbiwgY2hhcmFjdGVyLCBjYXBhY2l0eSkgJT4lCiMgICAgIHN1bW1hcmlzZShtZWFuID0gbWVhbihyZXNwb25zZSkpICU+JQojICAgICB1bmdyb3VwKCkgJT4lCiMgICAgIG11dGF0ZShjaGFyX2FnZSA9IHBhc3RlKGNoYXJhY3RlciwgYWdlX2Jpbiwgc2VwID0gIl8iKSkgJT4lCiMgICAgIHNlbGVjdCgtYWdlX2JpbiwgLWNoYXJhY3RlcikgJT4lCiMgICAgIHNwcmVhZChjaGFyX2FnZSwgbWVhbikgJT4lCiMgICAgIGRhdGEuZnJhbWUoKSAlPiUKIyAgICAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiMgICAgIGNvbHVtbl90b19yb3duYW1lcygiY2FwYWNpdHkiKQojICAgCiMgICAjIG5hbWVzKGRmX3RlbXApIDwtIGRmX3RlbXBbMSxdICU+JSB0KCkgJT4lIGMoKQojICAgIyBkZl90ZW1wIDwtIGRmX3RlbXBbLTEsXQojIAojICAgdHNuZTJEIDwtIFJ0c25lKGRmX3RlbXAsCiMgICAgICAgICAgICAgICAgICAgZGltcyA9IGRpbXNfc2V0LAojICAgICAgICAgICAgICAgICAgIGluaXRpYWxfZGltcyA9IGluaXRpYWxfZGltc19zZXQsCiMgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eSA9IHBlcnBsZXhpdHlfc2V0LAojICAgICAgICAgICAgICAgICAgIHRoZXRhID0gdGhldGFfc2V0LAojICAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gbWF4X2l0ZXJfc2V0LAojICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBjaGVja19kdXBsaWNhdGVzX3NldCkKIyAgIAojICAgdHNuZTJEX2RmIDwtIHRzbmUyRCRZICU+JQojICAgICBkYXRhLmZyYW1lKCkKIyAgIAojICAgcm93bmFtZXModHNuZTJEX2RmKSA8LSBuYW1lcyhkZilbLWMoMSwyKV0KIyAgIAojICAgdHNuZTJEX2RmIDwtIHRzbmUyRF9kZiAlPiUKIyAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpCiMgICAKIyAgIHJldHVybih0c25lMkRfZGYpCiMgfQpgYGAKCmBgYHtyfQojICMgbWFrZSBxdWFudGlsZXMKIyBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSA8LSBkX3NsaWRlX2FsbF9jb21wbGV0ZSAlPiUKIyAgIG11dGF0ZShiaW4gPSBudGlsZShhZ2UsIDUpKSAlPiUKIyAgIGdyb3VwX2J5KGJpbikgJT4lCiMgICBtdXRhdGUobWluX2FnZSA9IG1pbihhZ2UpLAojICAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlKSwKIyAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlLCBuYS5ybSA9IFQpLAojICAgICAgICAgIG1lZF9hZ2UgPSBtZWRpYW4oYWdlKSkgJT4lCiMgICB1bmdyb3VwKCkKIyAKIyAjIHNldCBwZXJwbGV4aXR5CiMgcGVycCA8LSA0CiMgbl9pdGVyIDwtIDEwMDAwCiMgdGhldGEgPC0gMAojIAojICMgNCBhZ2UgZ3JvdXBzCiMgdHNuZTEgPC0gdHNuZV9mdW5fYnljaGFyX2FnZXNsaWNlKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAxKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIHRzbmUyIDwtIHRzbmVfZnVuX2J5Y2hhcl9hZ2VzbGljZShkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKIyAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMikgJT4lCiMgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKIyAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKIyAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyB0c25lMyA8LSB0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMykgJT4lCiMgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKIyAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKIyAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyB0c25lNCA8LSB0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiMgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDQpICU+JQojICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiMgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiMgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCiMgdHNuZTUgPC0gdHNuZV9mdW5fYnljaGFyX2FnZXNsaWNlKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAojICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSA1KSAlPiUKIyAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAojICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIAojIHF1YW50aWxlX2FsbCA8LSB0c25lMSAlPiUgbXV0YXRlKGJpbiA9IDEpICU+JQojICAgZnVsbF9qb2luKHRzbmUyICU+JSBtdXRhdGUoYmluID0gMikpICU+JQojICAgZnVsbF9qb2luKHRzbmUzICU+JSBtdXRhdGUoYmluID0gMykpICU+JQojICAgZnVsbF9qb2luKHRzbmU0ICU+JSBtdXRhdGUoYmluID0gNCkpICU+JQojICAgZnVsbF9qb2luKHRzbmU1ICU+JSBtdXRhdGUoYmluID0gNSkpICU+JQojICAgZnVsbF9qb2luKGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQojICAgICAgICAgICAgICAgc2VsZWN0KGJpbiwgZW5kc193aXRoKCJfYWdlIikpICU+JQojICAgICAgICAgICAgICAgZGlzdGluY3QoKSkgJT4lCiMgICBtdXRhdGUoYmluX2xhYmVsID0gcGFzdGUwKHJvdW5kKG1pbl9hZ2UsIDIpLCAiLSIsIHJvdW5kKG1heF9hZ2UsIDIpLCAieSIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuaGVpZ2h0ID0gM30KIyBnZ3Bsb3QocXVhbnRpbGVfYWxsICU+JQojICAgICAgICAgIGZ1bGxfam9pbihlZmFfY29sb3JzICU+JSBzZWxlY3QoY2FwYWNpdHksIGZhY3RvcikpLAojICAgICAgICAgICAgIGFlcyh4ID0gWDEsIHkgPSBYMiwgbGFiZWwgPSBjYXBhY2l0eSwgY29sb3IgPSBmYWN0b3IpKSArCiMgICAjIGZhY2V0X3dyYXAofiBiaW5fbGFiZWwsIHNjYWxlcyA9ICJmcmVlIikgKyAjLCBuY29sID0gNSkgKwojICAgZmFjZXRfZ3JpZCh+IGJpbl9sYWJlbCwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWVfeCIpICsgIywgbmNvbCA9IDUpICsKIyAgIGdlb21fcG9pbnQoKSArCiMgICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoKSArCiMgICB0aGVtZV9idygpICsKIyAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiI2U0MWExYyIpKSArCiMgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiMgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiMgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKIyAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICsKIyAgIGxhYnModGl0bGUgPSAidC1TTkUgYnkgYWdlIHF1aW50aWxlIChzZWUgZmFjZXQgbGFiZWxzIGZvciBhZ2UgcmFuZ2UpIiwKIyAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgicGVycGxleGl0eTogIiwgcGVycCwgIjsgaXRlcmF0aW9uczogIiwgbl9pdGVyLCAiXG4obm90ZTogc2NhbGVzIHZhcnkgYnkgcXVpbnRpbGUpIiksCiMgICAgICAgeCA9ICJ0LVNORSBkaW1lbnNpb24gMSIsCiMgICAgICAgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5oZWlnaHQgPSAzfQojIHBlcnAgPC0gMgojIHRzbmVfYWxsIDwtIHRzbmVfZnVuKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGUsCiMgICAgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiMgICAgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCiMgIyB0c25lX2FsbCA8LSB0c25lX2Z1bl9ieWNoYXIoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZSwKIyAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKIyAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyAjIHRzbmVfYWxsIDwtIHRzbmVfZnVuX2J5Y2hhcl9hZ2VzbGljZShkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlLAojICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQojIAojIGdncGxvdCh0c25lX2FsbCAlPiUKIyAgICAgICAgICBmdWxsX2pvaW4oZWZhX2NvbG9ycyAlPiUgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IpKSwKIyAgICAgICAgICAgICBhZXMoeCA9IFgxLCB5ID0gWDIsIGxhYmVsID0gY2FwYWNpdHksIGNvbG9yID0gZmFjdG9yKSkgKwojICAgIyBmYWNldF93cmFwKH4gYmluX2xhYmVsLCBzY2FsZXMgPSAiZnJlZSIpICsgIywgbmNvbCA9IDUpICsKIyAgICMgZmFjZXRfZ3JpZCh+IGJpbl9sYWJlbCwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWVfeCIpICsgIywgbmNvbCA9IDUpICsKIyAgIGdlb21fcG9pbnQoKSArCiMgICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoKSArCiMgICB0aGVtZV9idygpICsKIyAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiI2U0MWExYyIpKSArCiMgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiMgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiMgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKIyAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICsKIyAgIGxhYnModGl0bGUgPSAidC1TTkUiLAojICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJwZXJwbGV4aXR5OiAiLCBwZXJwLCAiOyBpdGVyYXRpb25zOiAiLCBuX2l0ZXIpLAojICAgICAgIHggPSAidC1TTkUgZGltZW5zaW9uIDEiLAojICAgICAgIHkgPSAidC1TTkUgZGltZW5zaW9uIDIiKQpgYGAKCgoKIyMgdC1TTkU6IG9uIGNoYXJhY3RlcnMKCiMjIDIgZGltZW5zaW9ucwoKYGBge3IgdHNuZTJEfQojIHRzbmVfZDEgPC0gUnRzbmUoZDFfYWxsLCBkaW1zID0gMiwgaW5pdGlhbF9kaW1zID0gMywgCiMgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpOyBwbG90KHRzbmVfZDEkWSkKIyB0c25lX2QyIDwtIFJ0c25lKGQyX2FsbCwgZGltcyA9IDIsIGluaXRpYWxfZGltcyA9IDMsIAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QyJFkpCiMgdHNuZV9kMyA8LSBSdHNuZShkM19hbGwsIGRpbXMgPSAyLCBpbml0aWFsX2RpbXMgPSAzLAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QzJFkpCiMgdHNuZV9kNCA8LSBSdHNuZShkNF9hbGwsIGRpbXMgPSAyLCBpbml0aWFsX2RpbXMgPSAzLAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2Q0JFkpCgojICMgNC0xMHkgb24gMjAgcXVlc3Rpb24gdmVyc2lvbgojIHRzbmUyRF9kc2xpZGUgPC0gUnRzbmUoZF9zbGlkZV9hbGxfY29tcGxldGVbLWMoMSwyKV0sIGRpbXMgPSAyLCAKIyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfZGltcyA9IDIwLAojICAgICAgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eSA9IDEwLAojICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKQojIAojIHRzbmUyRF9kZiA8LSB0c25lMkRfZHNsaWRlJFkgJT4lCiMgICBkYXRhLmZyYW1lKCkgJT4lCiMgICBjYmluZChkX3NsaWRlX2FsbF9jb21wbGV0ZVssYygiYWdlIiwgImNoYXJhY3RlciIpXSkgJT4lCiMgICByZW5hbWUodHNuZTJEX2RpbTEgPSBYMSwgdHNuZTJEX2RpbTIgPSBYMikgJT4lCiMgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2xsIiwgInRlZGR5X2JlYXIiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkKYGBgCgpgYGB7ciB0c25lMkQgc2NhdHRlcnBsb3QsIGZpZy53aWR0aCA9IDUsIGZpZy5oZWlnaHQgPSA0fQojIGdncGxvdCh0c25lMkRfZGYsCiMgICAgICAgIGFlcyh4ID0gdHNuZTJEX2RpbTEsIHkgPSB0c25lMkRfZGltMiwgCiMgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlciwgCiMgICAgICAgICAgICBzaXplID0gYWdlKSkgKwojICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNikgKyAKIyAgIHNjYWxlX2NvbG9yX2JyZXdlcigiY2hhcmFjdGVyIiwgdHlwZSA9ICJkaXYiKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpKQpgYGAKCmBgYHtyIHRzbmUyRCAzRCBzY2F0dGVycGxvdCwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDR9CiMgcGxvdF9seSh0c25lMkRfZGYsIHggPSB+KGFnZSoxMCksIHkgPSB+dHNuZTJEX2RpbTEsIHogPSB+dHNuZTJEX2RpbTIsIAojICAgICAgICAgY29sb3IgPSB+Y2hhcmFjdGVyLCBjb2xvcnMgPSAiQnJCRyIsIAojICAgICAgICAgIyBzaXplID0gfmFnZSwgc2l6ZXMgPSBjKDMwLCAxMzApLAojICAgICAgICAgb3BhY2l0eSA9IDAuNikKYGBgCgojIyAzIGRpbWVuc2lvbnMKCmBgYHtyIHRzbmUzRH0KIyB0c25lX2QxIDwtIFJ0c25lKGQxX2FsbCwgZGltcyA9IDMsIGluaXRpYWxfZGltcyA9IDMsIAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QxJFkpCiMgdHNuZV9kMiA8LSBSdHNuZShkMl9hbGwsIGRpbXMgPSAzLCBpbml0aWFsX2RpbXMgPSAzLCAKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMiRZKQojIHRzbmVfZDMgPC0gUnRzbmUoZDNfYWxsLCBkaW1zID0gMywgaW5pdGlhbF9kaW1zID0gMywKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMyRZKQojIHRzbmVfZDQgPC0gUnRzbmUoZDRfYWxsLCBkaW1zID0gMywgaW5pdGlhbF9kaW1zID0gMywKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kNCRZKQoKIyAjIDQtMTB5IG9uIDIwIHF1ZXN0aW9uIHZlcnNpb24KIyB0c25lM0RfZHNsaWRlIDwtIFJ0c25lKGRfc2xpZGVfYWxsX2NvbXBsZXRlWy1jKDEsMildLCBkaW1zID0gMywgCiMgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSAyMCwKIyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSAxMCwKIyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSkKIyAKIyB0c25lM0RfZGYgPC0gdHNuZTNEX2RzbGlkZSRZICU+JQojICAgZGF0YS5mcmFtZSgpICU+JQojICAgY2JpbmQoZF9zbGlkZV9hbGxfY29tcGxldGVbLGMoImFnZSIsICJjaGFyYWN0ZXIiKV0pICU+JQojICAgcmVuYW1lKHRzbmUzRF9kaW0xID0gWDEsIHRzbmUzRF9kaW0yID0gWDIsIHRzbmUzRF9kaW0zID0gWDMpICU+JQojICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9sbCIsICJ0ZWRkeV9iZWFyIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCmBgYAoKYGBge3IgdHNuZTNEIDNEIHNjYXR0ZXJwbG90LCBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gOH0KIyBwbG90X2x5KHRzbmUzRF9kZiwgeCA9IH50c25lM0RfZGltMSwgeSA9IH50c25lM0RfZGltMiwgeiA9IH50c25lM0RfZGltMywgCiMgICAgICAgICBjb2xvciA9IH5jaGFyYWN0ZXIsIGNvbG9ycyA9ICJCckJHIiwgCiMgICAgICAgICBzaXplID0gfmFnZSwgc2l6ZXMgPSBjKDUwLCAyMDApLAojICAgICAgICAgIyBzaXplID0gNCwKIyAgICAgICAgIG9wYWNpdHkgPSAwLjYpCmBgYAoKCgojIyA0IGRpbWVuc2lvbnMKCmBgYHtyIHRzbmU0RH0KIyB0c25lX2QxIDwtIFJ0c25lKGQxX2FsbCwgZGltcyA9IDQsIGluaXRpYWxfZGltcyA9IDQsIAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QxJFkpCiMgdHNuZV9kMiA8LSBSdHNuZShkMl9hbGwsIGRpbXMgPSA0LCBpbml0aWFsX2RpbXMgPSA0LCAKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMiRZKQojIHRzbmVfZDMgPC0gUnRzbmUoZDNfYWxsLCBkaW1zID0gNCwgaW5pdGlhbF9kaW1zID0gNCwKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMyRZKQojIHRzbmVfZDQgPC0gUnRzbmUoZDRfYWxsLCBkaW1zID0gNCwgaW5pdGlhbF9kaW1zID0gNCwKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kNCRZKQoKIyAjIDQtMTB5IG9uIDIwIHF1ZXN0aW9uIHZlcnNpb24KIyB0c25lNERfZHNsaWRlIDwtIFJ0c25lKGRfc2xpZGVfYWxsX2NvbXBsZXRlWy1jKDEsMildLCBkaW1zID0gNCwgCiMgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSAyMCwKIyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSAxMCwKIyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSkKIyAKIyB0c25lNERfZGYgPC0gdHNuZTREX2RzbGlkZSRZICU+JQojICAgZGF0YS5mcmFtZSgpICU+JQojICAgY2JpbmQoZF9zbGlkZV9hbGxfY29tcGxldGVbLGMoImFnZSIsICJjaGFyYWN0ZXIiKV0pICU+JQojICAgcmVuYW1lKHRzbmU0RF9kaW0xID0gWDEsIHRzbmU0RF9kaW0yID0gWDIsIAojICAgICAgICAgIHRzbmU0RF9kaW0zID0gWDMsIHRzbmU0RF9kaW00ID0gWDQpICU+JQojICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9sbCIsICJ0ZWRkeV9iZWFyIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCmBgYAoKYGBge3IgdHNuZTREIDREIHNjYXR0ZXJwbG90LCBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gOH0KIyBwbG90X2x5KHRzbmU0RF9kZiwgeCA9IH50c25lNERfZGltMSwgeSA9IH50c25lNERfZGltMiwgeiA9IH50c25lNERfZGltMywgCiMgICAgICAgICBjb2xvciA9IH5jaGFyYWN0ZXIsIGNvbG9ycyA9ICJCckJHIiwgCiMgICAgICAgICBzaXplID0gfnRzbmU0RF9kaW00LCBzaXplcyA9IGMoNTAsIDIwMCksCiMgICAgICAgICAjIHNpemUgPSB+YWdlLCBzaXplcyA9IGMoNTAsIDIwMCksCiMgICAgICAgICAjIHNpemUgPSA0LAojICAgICAgICAgb3BhY2l0eSA9IDAuNikKYGBgCgoKYGBge3J9CiMgdHNuZTJEX2RmX3ZlcjIgPC0gdHNuZTJEX2RzbGlkZSRZICU+JQojICAgZGF0YS5mcmFtZSgpICU+JQojICAgY2JpbmQoZF9zbGlkZV9hbGxfY29tcGxldGVbXSkgJT4lCiMgICByZW5hbWUodHNuZTJEX2RpbTEgPSBYMSwgdHNuZTJEX2RpbTIgPSBYMikgJT4lICMsIAojICAgICAgICAgICMgdHNuZTJEX2RpbTMgPSBYMywgdHNuZTJEX2RpbTQgPSBYNCkgJT4lCiMgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2xsIiwgInRlZGR5X2JlYXIiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkKIyAKIyAKIyAKIyB0c25lX2NvciA8LSB0c25lMkRfZGZfdmVyMiAlPiUgCiMgICBzZWxlY3QoLWNoYXJhY3RlcikgJT4lIAojICAgY29yKCkgJT4lCiMgICBkYXRhLmZyYW1lKCkgJT4lIAojICAgcm93bmFtZXNfdG9fY29sdW1uKCJ0c25lX2RpbSIpICU+JQojICAgZmlsdGVyKGdyZXBsKCJ0c25lIiwgdHNuZV9kaW0pID09IFQpICU+JQojICAgc2VsZWN0KC1zdGFydHNfd2l0aCgidHNuZTJEIikpICU+JQojICAgZ2F0aGVyKGNhcGFjaXR5LCBjb3IsIC10c25lX2RpbSkKIyAKIyB0c25lX2Nvcl9vcmRlciA8LSB0c25lX2NvciAlPiUKIyAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKIyAgIHRvcF9uKDEsIGFicyhjb3IpKSAlPiUKIyAgICMgZmlsdGVyKHRzbmVfZGltID09ICJ0c25lMkRfZGltMSIpICU+JQojICAgbXV0YXRlKHRzbmVfZGltID0gZmFjdG9yKHRzbmVfZGltKSkgJT4lCiMgICBhcnJhbmdlKHRzbmVfZGltLCBkZXNjKGFicyhjb3IpKSkgJT4lCiMgICBkYXRhLmZyYW1lKCkgJT4lCiMgICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyIikgJT4lCiMgICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihvcmRlcikpKQojIAojIGdncGxvdCh0c25lX2NvciAlPiUgZnVsbF9qb2luKHRzbmVfY29yX29yZGVyICU+JSBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSksCiMgICAgICAgIGFlcyh4ID0gdHNuZV9kaW0sIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIAojICAgICAgICAgICAgZmlsbCA9IGNvciwgbGFiZWwgPSByb3VuZChjb3IsIDIpKSkgKyAKIyAgIGdlb21fdGlsZSgpICsKIyAgIGdlb21fdGV4dCgpICsgCiMgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIAojICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IGMoLTEsIDAsIDEpKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgbGFicyh4ID0gIiIsIHkgPSAiIikKCmBgYAoKYGBge3J9CiMgdHNuZV9jb3IgJT4lCiMgICBmaWx0ZXIodHNuZV9kaW0gPT0gInRzbmUyRF9kaW0xIikgJT4lCiMgICBhcnJhbmdlKGRlc2MoYWJzKGNvcikpKQojIAojIHRzbmVfY29yICU+JQojICAgZmlsdGVyKHRzbmVfZGltID09ICJ0c25lMkRfZGltMiIpICU+JQojICAgYXJyYW5nZShkZXNjKGFicyhjb3IpKSkKIyAKIyB0c25lX2NvciAlPiUKIyAgIGZpbHRlcih0c25lX2RpbSA9PSAidHNuZTJEX2RpbTMiKSAlPiUKIyAgIGFycmFuZ2UoZGVzYyhhYnMoY29yKSkpCiMgCiMgdHNuZV9jb3IgJT4lCiMgICBmaWx0ZXIodHNuZV9kaW0gPT0gInRzbmUyRF9kaW00IikgJT4lCiMgICBhcnJhbmdlKGRlc2MoYWJzKGNvcikpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NCwgZmlnLmhlaWdodD0yfQojIHRzbmUyRF9kZl92ZXIyICU+JQojICAgc2VsZWN0KGFnZSwgY2hhcmFjdGVyLCBzdGFydHNfd2l0aCgidHNuZSIpKSAlPiUKIyAgIGdhdGhlcih0c25lX2RpbSwgc2NvcmUsIHN0YXJ0c193aXRoKCJ0c25lIikpICU+JQojICAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyKSkgKwojICAgZmFjZXRfZ3JpZCh+dHNuZV9kaW0pICsKIyAgICMgZ2VvbV9zbW9vdGgoYWxwaGEgPSAwLjEpICsKIyAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFscGhhID0gMC4xKSArCiMgICBnZW9tX3BvaW50KHNpemUgPSAxKSArCiMgICBzY2FsZV9jb2xvcl9icmV3ZXIodHlwZSA9ICJkaXYiLCBwYWxldHRlID0gMSkgKwojICAgc2NhbGVfZmlsbF9icmV3ZXIodHlwZSA9ICJkaXYiLCBwYWxldHRlID0gMSkgKwojICAgdGhlbWVfYncoKQpgYGAKCgo=